簡體   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