Я уже несколько часов с этой проблемой сижу, не заставляя ее работать так, как я хочу.
Я создаю сервер, который читает данные из клиента 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 для проверки переменных)