繁体   English   中英

SocketChannel如何处理ByteBuffer中切掉的UTF-8字符和行

[英]SocketChannel how to deal with cutted UTF-8 chars and lines in ByteBuffer

我的系统正在通过SocketChannel接收以0x0D 0x0A结尾的UTF-8行。 我像这样读取ByteBuffer中的数据:

final ByteBuffer buffer = ByteBuffer.allocate(bufsize);
final int bytesRead = _mySocket.read(buffer);

缓冲区足够大,可以包含很多行。 但是我没有足够大的缓冲区来容纳所有行,行是动态处理的。

缓冲区不能包含所有行,因此行可能会被分割,一个字符编码的字节数也可能会被分割。

我想到了一个解决方案:

  1. 通过逐字节分析ByteBuffer处理我可以提取的所有行(我搜索0x0D 0x0A)
  2. 识别未处理的字节
  3. 将它们存储在一个临时变量中
  4. 清除ByteBuffer
  5. 将未处理的字节添加到ByteBuffer
  6. 再次读取SocketChannel。
  7. 重复此操作,直到找到指示收到所有行的行。

Java或任何库是否已提供此功能?

谢谢您的回答,米克尔

我建议使用java.util.Scanner,它知道如何处理SocketChannel,并且知道如何读取行

    Scanner sc = new Scanner(_mySocket);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM