gpt4 book ai didi

java - Java中有缓冲区填充接收方法吗?

转载 作者:行者123 更新时间:2023-12-01 10:58:31 24 4
gpt4 key购买 nike

我习惯在 C++ 中使用 Winsock,并且我有一个服务器应用程序,它可以发送和接收带有类似于 HTTP 格式的 header 的数据。

当我在 C++ 中使用带有足够大缓冲区的 recv() 时,我将始终收到整个数据包...

DataStreamInput.read() 的行为是否类似?我尚未收到消息,并且我认为在迭代再次读取之前我没有收到完整消息...

当我在 Windows for Android 上编写此内容时,调试起来很困难,只是想知道是否有一种方法更接近我的 C++ 代码?

最佳答案

DataInputStream.read(byte[])将读取任意数量的字节,直到传入的字节数组长度并返回。读取的字节数将作为返回值,如果已到达流末尾,则返回值为 -1。该调用将阻塞,直到有一些字节可用、到达流末尾或发生 IOException。

您需要检查返回值以查看读取了多少字节,如果您需要更多数据,请继续调用它,直到获得所需的所有数据。

例如,如果您知道需要 100 个字节

InputStream in = ...
byte b = new byte[100]
int c = 0;
int read = 0;
while(c < b.length && read != -1){
read = in.read(b, c, b.length - c)
if(read != -1)
c += read;
}
}

关于java - Java中有缓冲区填充接收方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33469234/

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