繁体   English   中英

从Java套接字(TCP)读取19000字节

[英]read 19000 bytes from java socket(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。这几乎是相同的位置,但略有不同。

知道我在这里做错了什么吗?

您可以尝试像这样大块读取它:

ByteArrayOutputStream b= new ByteArrayOutputStream();

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

byte data[] = b.toByteArray();

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

“从输入流中读取一定数量的字节并将其存储到缓冲区数组b中。实际读取的字节数将以整数形式返回。”

含义: read()不会等待,直到它有足够的字节来填充缓冲区。 它可以填充一些字节已经很高兴了。 因此,您必须检查返回的号码。 并循环直到收集到所需的所有字节为止。 换句话说:不要提供大小为19K的缓冲区; 使用较小的 然后将收到的字节复制到另一个数据结构中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM