将字节[]缓冲区重置为零?
问题描述:
在用于插座下面的代码,我声明一个字节缓冲器而在一个循环中监听客户端的消息:将字节[]缓冲区重置为零?
// 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
可能与通过套接字传输给您的字符串不匹配。
答
同意dasblinkenlight answers,而是要回答这个问题本身(如何复位数组),你可以使用Arrays.fill
的值设置为每一个细胞
byte[] array = new byte[10];
Arrays.fill(array, (byte)0);
这不是接收通过串一种可靠的方法插座。不能保证一个完整的编码字节数组将在单个'read()'调用中返回。使用'DataInput/DataOutput''readUTF()/ writeUTF()'或其他同样可靠的东西。 –
@JamesKPolk:或者我可以传递字节长度.. – user963241
是的,这可以工作,特别是如果您使用'DataInput/DataOutput'方法,例如'readInt()/ writeInt()'和'readFully() '。 –