Java NIO SocketChannel читает предварительно определенный номер байта

У меня есть сервер сокета Java NIO.

Сервер получает JSONObjects с удаленных клиентов. я использую SocketChannel.read(ByteBuffer) метод для того, чтобы читать с канала. каждое сообщение заканчивается символом \n, который обозначает конец текущего сообщения.

моя проблема в том, что иногда read() метод читать больше байтов и достигать после '\n'.. есть ли способ прочитать из SocketChannel только до тех пор, пока не будет найдено \n я подумал, может быть, побайтовое чтение (я просто не мог найти документы о том, как это реализовать..)?

какие-либо другие решения?

1 ответ

Решение

Обрабатывайте байты из вашего ByteBuffer вплоть до '\n' включительно, поэтому позиция буфера является первым байтом после '\n', затем вызывайте ByteBuffer.compact (). Любые байты, которые прошли '\n', останутся в буфере, и следующее чтение добавится к ним.

Другие вопросы по тегам