Java InputStream 0x0A问题

时间:2011-05-13 00:40:30

标签: java

在Java中我有以下

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

            System.out.println(numRead);
}

当我在本地发送数据流时,我会一次性收到这个数据,然后输出为:

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(hex 0A 48 08 05 12 20 44 36)

我在这里错过了什么吗?

提前致谢

3 个答案:

答案 0 :(得分:3)

您不能假设套接字流会立即提供所有内容,即使它似乎适合数据包。路由上的服务器可能会出于自身原因选择在线路终结器(或其他任何地方)拆分数据包,而您无法控制它。在ByteArrayOutputStream或类似的缓冲区中累积响应,并在获得所有内容后对其进行处理。

答案 1 :(得分:2)

我遇到了串口问题。显然,使用javax.comm API修改换行符和回车符代码(0x0a和0x0d)会产生一些填充问题。

在谷歌搜索后,我找到了RXTX库。

请阅读: http://wathsalav.blogspot.com/2006/01/suns-javaxcomm-driver-has-problems.html

希望这有帮助!

答案 2 :(得分:0)

Javadoc在InputStream.read(byte[] b,int off,int len)上说:

  

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

它确实读取了8个字节,但分两步,先是1个字节,然后是7个字节。如果你运气不好,它可以读取1个字节8次。