我正在使用Kafka并继续学习本教程(https://cwiki.apache.org/confluence/display/KAFKA/Consumer+Group+Example)
经过一些调整后,代码会编译,所有内容都会运行。我的问题是我正在尝试利用Kafka服务器发送给我的一些字节数来做一些处理。如果我使用默认代码,一切正常,字节数组转换为字符串并显示在我的屏幕上。如果我尝试读取字节数组并将其分配给字符串,以便我可以将其显示在屏幕上,然后解析它没有任何反应。
it.next()。message()返回一个字节数组
默认代码:
ConsumerIterator<byte[], byte[]> it = m_stream.iterator();
while (it.hasNext())
System.out.println("Thread " + m_threadNumber + ": " + new String(it.next().message()));
我的代码中断了:
ConsumerIterator<byte[], byte[]> it = m_stream.iterator();
String msg= "";
while (it.hasNext())
msg = new String(it.next().message());
System.out.println("Thread " + m_threadNumber + ": " + msg);
有人可以告诉我为什么我不能将字节数组分配给我的String吗?当然如何解决我的故障?
我看过了:
Convert byte to string in Java
但它们似乎都没有应用,它们都尝试在String初始化时将字节数组分配给String,我不能在这里做。
答案 0 :(得分:4)
您缺少大括号,因此您的println仅在最后一次执行。试试这个:
ConsumerIterator<byte[], byte[]> it = m_stream.iterator();
String msg= "";
while (it.hasNext())
{
msg = new String(it.next().message());
System.out.println("Thread " + m_threadNumber + ": " + msg);
}
答案 1 :(得分:3)
您的代码失败了,因为您没有将代码块括在大括号中。调整代码显示:
ConsumerIterator<byte[], byte[]> it = m_stream.iterator();
while (it.hasNext()) { // <- here
String msg = new String(it.next().message());
System.out.println("Thread " + m_threadNumber + ": " + msg);
} // <- and here
事实上,使用这些大括号,此代码段相当于您的第一个代码段。
顺便说一下:无需在循环外声明变量msg
。
答案 2 :(得分:0)
只需在循环块中放置花括号。
while (it.hasNext()){msg = new String(it.next().message());
System.out.println("Thread " + m_threadNumber + ": " + msg);}