在Java中,我有以下内容

while(true) {
            input  = clientSocket.getInputStream();
            byte[] bytes = new byte[4096];
            int numRead=input.read(bytes, 0, bytes.length);

            System.out.println(numRead);
}


当我在本地发送数据流时,以十六进制0A 48 08 05 12 20 44 36表示,我一口气收到此消息,输出为:

8  (with the hex being 0A 48 08 05 12 20 44 36)


但是,当我通过无线网络运行它时,会得到以下输出:

1  (with the hex being 0A)
7  (with the hex being 48 08 05 12 20 44 36)


为什么这样做呢?我希望它返回值8(十六进制0A 48 08 05 12 20 44 36)

我在这里想念什么吗?

提前致谢

最佳答案

您不能假设套接字流可以一次传送所有内容,即使看起来好像可以放入一个数据包中也是如此。沿途的服务器出于自身原因可能会选择在线路终结器(或其他任何地方)分解数据包,您对此无能为力。在ByteArrayOutputStream或类似的缓冲区中累积响应,并在获得全部响应后对其进行处理。

10-07 14:27