gpt4 book ai didi

java - 套接字流读取何时返回?

转载 作者:行者123 更新时间:2023-12-02 04:42:54 26 4
gpt4 key购买 nike

让我用下面的例子来解释我的问题:

Socket socket = new Socket(); 
socket.setReceiveBufferSize(64*1024);
socket.connect(AddressOfSomeStreamingWithEndlessData, 6000);
InputStream inputStream = socket.getInputStream();
byte[] byteBuffer = new byte[64*1024];
while(true)
{
//When does the underlying reading decide to return?
int iRead = inputStream .read(byteBuffer);
}

我想知道系统如何决定返回 inputStream .read(byteBuffer)。它不会等到byteBuffer填满,也不会在有字节时立即返回。这是否高度依赖于设备?

[更新]:

我基本上使用了上面的代码,并在两个不同的 Android 平板电脑和一个模拟器上进行了一些测试,以从流媒体源接收数据。以下是我对这个特定场景的观察:

inputStream .read(byteBuffer) 返回一个或多个 TCP 负载。这里的有效负载是指 TCP 报文段的数据部分(即 TCP 数据包减去 TCP header )。有效负载大小显然有所不同,如果源发送的是这样的内容,则可以小至一个字节。然而,似乎有一个远远小于接收器提供的窗口大小(在本例中为 65536)的上限。 1000 到 1500 之间似乎也有所不同。例如,对于一种配置,它是 1460,所以 iRead 是 1460、2920、4380、5840,...对于另一种配置,它是 1448。我想强调的是,我我在这里报告我的观察,而不是概括任何内容。

最佳答案

它会阻塞至少一个已接收的字节,或者流结束或发生异常。如果已接收到数据,则传输所有数据,直至达到代码指定的限制,并返回传输的字节数。其中多少完全取决于收到的数据量,您无法以任何方式预测或控制。

请参阅 Javadoc。

关于java - 套接字流读取何时返回?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29966984/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com