2011-05-13 74 views
1

在Java中,我有以下的Java的InputStream的0x0A问题

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)

我在这里错过了什么吗?

在此先感谢

回答

3

你不能假定套接字流将立即交付的一切,即使它似乎将放入一个包。路由上的服务器可能会因为自己的原因选择在行终止符(或其他任何地方)中拆分数据包,并且您无法控制该数据包。在ByteArrayOutputStream或类似的缓冲区中累积响应,并在完成所有操作后进行处理。

0

的Javadoc说,这对InputStream.read(byte[] b,int off,int len)

读取最多len从输入流数据的字节到字节数组。尝试读取多达len字节,,但较小的数字可能被读取为。实际读取的字节数作为整数返回。

它没有读取8个字节,但分两步,先是1个字节,然后是7个字节。如果你不走运,它可能会读取1个字节8次。