2016-12-26 32 views
0

目前我遇到了一种情况,我想将inputstream读入只包含单个字节的字节数组。我重复执行此操作一定次数以确保获得相应的字节长度。例如,读取40个字节的40个字节。但是在这个套接字的另一端,它在每个写入方法中写入512个字节(实际上,在大多数情况下,读取缓冲区是512字节,只是在某种情况下我每次读取一个字节)。我想知道在这种情况下,发送套接字每次仍然在网络上写512个字节,并且接收套接字全部接收并将它们存储在本地字节数组中,并且read方法每次从本地数组读取一个字节或发送套接字每次只写入1个字节?这个问题听起来有些困惑,希望我明确表示。任何帮助都非常感谢!tcp套接字的读取方法如何工作?

回答

3

它会阻塞,直到内核的套接字接收缓冲区中有一些数据可用,然后传输尽可能多的字节。

+0

这是否意味着即使read方法每次只填充单个字节数组,接收套接字可能已经接收到512个字节并且调用read方法40次将不会触发40次在发送套接字中调用write方法? – user1870797

+0

“,然后传输尽可能多的字节。”听起来有点困惑。你的意思是内核的接收缓冲区将被重新设置为新的输入流数据,无论多少字节的读取方法填充字节数组? – user1870797

+0

@ user1870797(1)调用read方法不会'触发写入方法'。发送应用程序调用写入方法。 (2)无论读取方法填充到字节数组有多少个字节,这是'重新​​设置新的输入流数据'的措辞,这是困惑的。我不知道你在说什么,从“重置”这个词开始。 – EJP

相关问题