Извлечение <CRLF>-строки из ByteBuffer - я запутался - PullRequest
1 голос
/ 28 сентября 2011

Я уже несколько часов с этой проблемой сижу, не заставляя ее работать так, как я хочу.

Я создаю сервер, который читает данные из клиента telnet.Сервер использует java.nio (ServerSocketChannel) и считывает в ByteBuffer.После каждого read () я вызываю метод, который должен извлечь все строки (разделенные "\ r \ n") из ByteBuffer и оставить (если есть) оставшиеся байты таким образом, чтобы следующий read () поместилони в правильном положении.

Пример:

read () читает 6 байтов, ByteBuffer теперь содержит "Hi \ r \ nHo".То, что я хочу сделать, это извлечь все полностью полученные строки, в этом примере «Привет \ r \ n».Я хочу, чтобы "Ho" было оставлено в ByteBuffer, смещено так, чтобы "H" находилось в позиции 0, так что когда я вызову read () в следующий раз и получу "w ты? \ R \ n", он будетбыть помещенным в правильное место в ByteBuffer.

Я создал небольшую тестовую программу, но я не могу заставить ее сделать это правильно: http://pastebin.com/eun1nV2N

Попробуйте разные тестовые строки («HI», «HI \ r \ n», «HI \ r \ nHEY \ r» и т. Д.), И вы увидите, когда это не удастся.(Я использовал инструмент отладки eclipse для проверки переменных)

Ответы [ 2 ]

2 голосов
/ 28 сентября 2011

Попробуйте обернуть ByteBuffer InputStream и BufferedReader, тогда вы сможете использовать readline, чтобы получать строки одну за другой.

0 голосов
/ 29 сентября 2011
  1. Переверните буфер.
  2. Вызывайте get (), пока не получите \ r \ n, сохраняя результат get (), конечно.
  3. Сжатие буфера.
...