在下面的套接字代码中,我声明了一个字节缓冲区并在循环中侦听客户端消息:
// Create some buffer
byte[] buffer = new byte[512];
while (true)
{
// Listen for messages from Client
int length = socket.getInputStream().read(buffer);
if (length != -1)
System.out.println(new String(buffer));
else
break;
// Reset buffer here to zeros?
}
每次我都需要重置缓冲区的内容以接收新邮件。这样做的正确方法是什么?
答案 0 :(得分:3)
您不需要重置缓冲区,您需要一个if (length != -1) {
System.out.println(new String(buffer, 0, length));
}
构造函数,该构造函数不会超过已接收字节的缓冲区部分的末尾:
Charset
现在,即使缓冲区很脏,您的代码也能正常工作。
注意:为了更好的可移植性,请将所需的String
传递给String
构造函数。否则,您构造的{{1}}可能与通过套接字传输给您的字符串不匹配。
答案 1 :(得分:3)
同意dasblinkenlight answers,但要回答问题本身(如何重置数组),您可以使用Arrays.fill
为每个单元格设置一个值
byte[] array = new byte[10];
Arrays.fill(array, (byte)0);