从java socket(TCP)读取19000个字节

时间:2015-04-22 12:07:55

标签: java sockets tcp

这是我的简化代码

sock.getOutputStream().write(buff); //send a readRequest
byte[] rbuff = new byte[19210]; //Answer has 19210 bytes of data
sock.getInputStream().read(rbuff);

在wireshark中,我看到它被分成几个tcp包。 但是,只要19210字节到达,读取是否应该等待?

我得到了数据,但是从某个位置开始,所有字节都是0.这个位置大多是相同的位置但是有点不同。

知道我在这里做错了吗?

2 个答案:

答案 0 :(得分:3)

您可以尝试以这样的方式阅读它:

ByteArrayOutputStream b= new ByteArrayOutputStream();

byte[] buf = new byte[1024];
while (count = in.read(buf)) > 0)
{
  b.write(buf,0,n);
}

byte data[] = b.toByteArray();

答案 1 :(得分:1)

只需研究Inputstream.read()的Javadoc:

  

"从输入流中读取一些字节数并将它们存储到缓冲区数组b中。实际读取的字节数以整数形式返回。"

含义:<div ng-class="{'new': item.new}"></div> 不等到有足够的字节来填充缓冲区。当它可以填充某些字节时,它已经很开心了。因此,您必须检查返回的号码;并循环,直到您收集了所需的所有字节。换句话说:不提供大小为19K的缓冲区;使用较小的一个;和&#34;复制&#34;超过你收到的另一个数据结构的字节。