長さヘッダーが前にあるソケットを介して送信されるパケットがあります。したがって、すべての送信には、4 バイトの長さ情報の後にパケットが続きます。したがって、read()
行内の次のパケットを誤って読み取らないように、長さを決して超えないように制限する必要があります。
InputStream in
は入力ストリーム、ByteArrayOutputStream byteStream
は着信パケットを書き込むストリーム、 はint len
着信伝送の長さです。
これが私が思いついたものです:
for (int i = 0; i < len; i++) {
byteStream.write(in.read());
}
これはまったく恐ろしいことです。バイトを 1 つずつ読み取ります。バッファを使用してこれを行うより良い方法があるかどうかを確認したいと思っていました(ストリームをコピーする標準的な方法に似ています)。