我有一个关于从服务器套接字读取字节的问题。 我在网络上使用识字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();
}
{
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));
}
}
}
所有字符串都到达服务器但在块8192b中 - 我无法连接字符串,因为我不知道最后一个字符串JSON是否是预览的一部分。
答案 0 :(得分:2)
即使您增加缓冲区大小,也无法保证只需一次调用wsIS.read
即可读取整个字符串。
这意味着你必须有一些机制来知道前一个字符串的结束位置和新字符串的开头。一些选择如下:
ObjectOutputStream
/ ObjectInputStream