私のシステムは、SocketChannel を介して 0x0D 0x0A で終了する UTF-8 行を受信しています。次のように ByteBuffer でデータを読み取ります。
final ByteBuffer buffer = ByteBuffer.allocate(bufsize);
final int bytesRead = _mySocket.read(buffer);
バッファーは、多くの行を含めるのに十分な大きさです。しかし、すべての行を含めるのに十分な大きさのバッファーを持つことはできません。行はその場で処理されます。
バッファーにすべての行を含めることはできないため、行が分割される可能性があり、1 バイト以上でエンコードされた文字も分割される可能性があります。
私は解決策について考えました:
- ByteBuffer をバイト単位で分析して抽出できるすべての行を処理します (0x0D 0x0A を検索します)。
- 未処理のバイトを特定する
- それらを一時変数に格納します
- ByteBuffer をクリアする
- 未処理のバイトを ByteBuffer に追加します
- SocketChannel を再度読み取ります。
- すべての行を受信したことを示す行が見つかるまで、これを繰り返します。
Java やその他のライブラリはすでにこの機能を提供していますか?
答えてくれてありがとう、ミカエル