サーバーソケットからのバイトの読み取りについて質問があります。ネットワーク上のリテラシー 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));
}
}
}
問題:
すべての文字列がサーバーに到着しましたが、ブロック 8192b で - 最後の文字列 JSON がプレビューの一部であるかどうかがわからないため、文字列を連結できません。