分配给字符串

时间:2015-07-24 16:17:57

标签: java arrays string bytearray apache-kafka

我正在使用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吗?当然如何解决我的故障?

我看过了:

Java byte to string

Convert byte to string in Java

converting byte[] to string

但它们似乎都没有应用,它们都尝试在String初始化时将字节数组分配给String,我不能在这里做。

3 个答案:

答案 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);}