将byte []缓冲区重置为零?

时间:2017-06-09 10:55:26

标签: java sockets buffer

在下面的套接字代码中,我声明了一个字节缓冲区并在循环中侦听客户端消息:

// 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?
}

每次我都需要重置缓冲区的内容以接收新邮件。这样做的正确方法是什么?

2 个答案:

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