gpt4 book ai didi

java - 服务器套接字读取长字符串

转载 作者:行者123 更新时间:2023-11-30 04:36:44 25 4
gpt4 key购买 nike

我有一个关于从服务器套接字读取字节的问题。我使用网络上读写 8192b 字节的默认值。问题是有时您需要发送大于缓冲区容量的文件。为了避免增加缓冲区,因为您可以知道那些在不同时间到达的数据包是相关的?

客户端片段:

{
String c = xxxxx //imagine that it an string format JSON with 64000bites length
OutputStream wsOS = socket.getOutputStream();
wsOS.write(new String(data,"UTF-8"));
wsOS.flush();
}

当服务器端收到 JSON 字符串时:

{

byte[] buffer = new byte[8192];
int size = 0;

StringBuilder str = new StringBuilder();

size = wsIS.read(buffer);

if (size > 0) {

str.append(new String(buffer, "UTF-8")
.substring(0, size));

while (wsIS.available() > 0) {
size = wsIS.read(buffer);
str.append(new String(buffer, "UTF-8")
.substring(0, size));
}

}
}

问题:

所有字符串均已到达服务器,但在 block 8192b 中 - 我无法连接该字符串,因为我不知道最后一个字符串 JSON 是否是预览的一部分。

最佳答案

即使增加缓冲区大小,也不能保证在一次调用 wsIS.read 中读取整个字符串。

这意味着您必须有某种机制来知道前一个字符串在哪里结束以及新字符串在哪里开始。一些选择如下:

  1. 使用ObjectOutputStream/ObjectInputStream
  2. 在实际写入字符之前先写入字符数。在阅读方面,阅读长度,然后阅读那些字符

关于java - 服务器套接字读取长字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13318229/

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