我的系统正在通过 SocketChannel 接收以 0x0D 0x0A 结尾的 UTF-8 行。我像这样在 ByteBuffer 中读取数据:
final ByteBuffer buffer = ByteBuffer.allocate(bufsize);
final int bytesRead = _mySocket.read(buffer);
缓冲区足够大,可以包含很多行。但是我不能有一个足够大的缓冲区来包含所有行,行是动态处理的。
缓冲区不能包含所有行,因此可能会拆分行,也可能会拆分超过一个字节编码的字符。
我想到了一个解决方案:
- 通过逐字节分析 ByteBuffer 来处理我可以提取的所有行(我搜索 0x0D 0x0A)
- 识别未处理的字节
- 将它们存储在临时变量中
- 清除字节缓冲区
- 将未处理的字节添加到 ByteBuffer
- 再次阅读 SocketChannel。
- 重复此操作,直到找到指示我收到所有行的行。
java 或任何库是否已经提供此功能?
感谢您的任何回答,米凯尔