gpt4 book ai didi

java - 套接字通信中大数据的读写方法不能可靠地工作

转载 作者:行者123 更新时间:2023-11-29 10:08:15 26 4
gpt4 key购买 nike

我已经创建了一个用于服务器客户端通信的套接字编程。我正在使用 DataInputStreamread(byte[]) 读取数据,还使用 ​​DataOutputStream 的 write(byte[]) 写入数据

每当我发送少量数据时,我的程序都能正常工作。但是,如果我发送 20000 个字符的数据并发送 10 次,那么我能够完美地接收数据 8 次,但不是 2 次。

那么我能否在套接字编程中使用读写可靠地发送和接收数据?

最佳答案

我的猜测是,您正在向 read() 发出单个调用,并假设它将返回您请求的所有数据。流通常不会那样工作。它会阻塞,直到有一些数据可用,但它不会等到有足够的数据来填充数组。

通常这意味着循环。例如:

byte[] data = new byte[expectedSize];
int totalRead = 0;
while (totalRead < expectedSize)
{
int read = stream.read(data, totalRead, expectedSize-totalRead);
if (read == -1)
{
throw new IOException("Not enough data in stream");
}
totalRead += read;
}

如果您一开始就不知道需要多少字节,您可能还想继续循环,但这一次直到 read() 返回 -1。使用缓冲区(例如 8K)读取和写入 ByteArrayOutputStream。读取完毕后,您可以从 ByteArrayOutputStream 中获取字节数组形式的数据。

关于java - 套接字通信中大数据的读写方法不能可靠地工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/780373/

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