将 byte[] 缓冲区重置为零?
Resetting byte[] buffer to zeros?
在下面的套接字代码中,我声明了一个字节缓冲区并循环侦听客户端消息:
// 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?
}
每次我都需要重置缓冲区的内容以接收新消息。执行此操作的正确方法是什么?
您不需要重置缓冲区,您需要一个 String
构造函数,该构造函数不会超过接收到字节的缓冲区部分的末尾:
if (length != -1) {
System.out.println(new String(buffer, 0, length));
}
现在,即使缓冲区变脏,您的代码也能正常工作。
注意: 为了更好的可移植性,将所需的 Charset
传递给 String
构造函数。否则,您构造的 String
可能与通过套接字传输给您的字符串不匹配。
同意, but to answer the question itself (how to reset an array), you can use Arrays.fill
为每个单元格设置一个值
byte[] array = new byte[10];
Arrays.fill(array, (byte)0);
在下面的套接字代码中,我声明了一个字节缓冲区并循环侦听客户端消息:
// 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?
}
每次我都需要重置缓冲区的内容以接收新消息。执行此操作的正确方法是什么?
您不需要重置缓冲区,您需要一个 String
构造函数,该构造函数不会超过接收到字节的缓冲区部分的末尾:
if (length != -1) {
System.out.println(new String(buffer, 0, length));
}
现在,即使缓冲区变脏,您的代码也能正常工作。
注意: 为了更好的可移植性,将所需的 Charset
传递给 String
构造函数。否则,您构造的 String
可能与通过套接字传输给您的字符串不匹配。
同意Arrays.fill
为每个单元格设置一个值
byte[] array = new byte[10];
Arrays.fill(array, (byte)0);