套接字InputStream.read(byte [],int,int)始终返回第三个参数值

时间:2019-01-13 13:32:03

标签: java sockets networking socket.io

我使用Java 8编写了一个简单的客户端和服务器,以验证使用Zero copy比使用article的传统方法更有效。但是我遇到了一个问题,在服务器端,方法InputStream.reamd(byte[],int postion,int length)总是返回length,即使从InputStream的最后一次读取没有任何数据。

这样的代码;

    while (true) {
        Socket socket = serverSocket.accept();
        inputStream = socket.getInputStream();

        byte[] readBuf = new byte[4096];
        long sum = 0L;
        while (true) {
            int readN = inputStream.read(readBuf, 0, 4096);
            System.out.println("read from buffer " + readN);
            if (-1 == readN) {
                break;
            }
            sum += readN;
        }
        System.out.println("total receive " + sum + " bytes");
    }

最后两个输出是:

read from buffer 4096
read from buffer -1

除了输出是:

read from buffer 3440
read from buffer -1

Java文档说:

  

public int read(byte [] b,                   诠释                   int len)            引发IOException

     

从输入流中读取最多len个字节的数据到一个字节数组中。尝试读取多达len个字节,但可能读取的字节数较小。实际读取的字节数以整数形式返回。

为什么代码的行为与文档不一致?

0 个答案:

没有答案