Непрерывное чтение из socketchannel в bytebuffer - PullRequest
0 голосов
/ 02 декабря 2018

Я пытаюсь получить все данные из SocketChannel в ByteBuffer.Поскольку я могу получать сообщения разной длины из канала, я хотел бы зацикливаться, пока чтение не вернет мне 0 байтов, и в этом случае я знаю, что все готово и что все данные теперь находятся в буфере.Я знаю, что мне нужно также обработать случай, когда -1 возвращается из чтения.

ByteBuffer buf = ByteBuffer.allocate(maxBytes);
int bytesRead;
while ((bytesRead = channel.read(buf)) > 0) {
    totalBytesRead += bytesRead;
}
return totalBytesRead;

Однако, когда я запускаю этот код, он читает полные данные при первом чтении, но затем, когдаэто читает во второй раз (и я ожидаю 0 байтов), что-то идет не так, и это ломается.Странно то, что я не получаю сообщений об ошибках, и при переходе в режиме отладки он не переходит на следующую строку, т.е. на возврат.

...