Проверка данных, полученных на неблокирующем сервере

Я создаю неблокирующий сервер с использованием пакета javas NIO, и у меня есть пара вопросов о проверке полученных данных.

Я заметил, что когда я вызываю чтение на канале сокета, он пытается заполнить байтовый буфер, в который он читается (согласно документации). Когда я отправлю 10 байтов на сервер от клиента, сервер прочитает эти десять байтов в буфер байтов, остальные байты в буфере байтов останутся равными нулю, а число, возвращаемое из операции чтения, будет размер моего байтового буфера, хотя клиент записал только 10 байт.

Я пытаюсь выяснить, есть ли способ получить только количество байтов, которое клиент отправил на сервер, когда сервер читает из канала сокета (в приведенном выше случае 10 вместо 1024).

Если это не сработает, я знаю, что могу отделить все фактически полученные данные от клиента от этих «лишних» данных, хранящихся в байтовом буфере, используя разделители в сочетании с моими «заголовками набора инструкций», а что нет, но кажется как будто это должно существовать, поэтому я должен задаться вопросом, упускаю ли я что-то очевидное или есть какая-то низкоуровневая причина, по которой это невозможно сделать.

Спасибо :)


person vimalloc    schedule 15.07.2010    source источник


Ответы (1)


вы, вероятно, забыли вызвать пресловутый flip() в своем буфере.

buffer.clear();
channel.read(buffer);
buffer.flip();
// now you can read from the buffer
buffer.get...

Мне нужно изменить свою подпись на nio.sucks

person irreputable    schedule 15.07.2010