java byte[]to string在分配给string时不起作用

iyzzxitl  于 2021-06-08  发布在  Kafka
关注(0)|答案(3)|浏览(375)

我正在使用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);

有人能告诉我为什么不能把字节数组分配给我的字符串吗?当然,如何修复我的故障?
我看了一下:
java字节到字符串
java中字节到字符串的转换
将字节[]转换为字符串
但它们似乎都不适用,它们都试图在字符串初始化时将字节数组分配给字符串,而我在这里不能这样做。

bzzcjhmw

bzzcjhmw1#

只要把花括号,而环块。

while (it.hasNext()){msg = new String(it.next().message());
System.out.println("Thread " + m_threadNumber + ": " + msg);}
k4aesqcs

k4aesqcs2#

您的代码失败,因为您没有用大括号括起代码块。调整代码会显示:

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 在圈外。

i7uaboj4

i7uaboj43#

你缺少了花括号,所以你的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);
}

相关问题