Java NIO SocketChannel читает предварительно определенный номер байта
У меня есть сервер сокета Java NIO.
Сервер получает JSONObjects
с удаленных клиентов. я использую SocketChannel.read(ByteBuffer)
метод для того, чтобы читать с канала. каждое сообщение заканчивается символом \n, который обозначает конец текущего сообщения.
моя проблема в том, что иногда read()
метод читать больше байтов и достигать после '\n'.. есть ли способ прочитать из SocketChannel
только до тех пор, пока не будет найдено \n я подумал, может быть, побайтовое чтение (я просто не мог найти документы о том, как это реализовать..)?
какие-либо другие решения?
1 ответ
Обрабатывайте байты из вашего ByteBuffer вплоть до '\n' включительно, поэтому позиция буфера является первым байтом после '\n', затем вызывайте ByteBuffer.compact (). Любые байты, которые прошли '\n', останутся в буфере, и следующее чтение добавится к ним.