在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)
我在这里错过了什么吗?
提前致谢
答案 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次。