在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或类似的缓冲区中累积响应,并在获得全部响应后对其进行处理。