1: Это не может быть ошибкой!
[при условии, что в буфере есть читаемые данные] ...
Можно ожидать -1 в конце потока ... См. http://docs.oracle.com/javase/1.4.2/docs/api/java/nio/channels/SocketChannel.html#read%28java.nio.ByteBuffer%29
Если вы постоянно получаете положительное значение от вызова read (), вам нужно будет определить, почему данные читаются постоянно.
Конечно, загадка здесь, в конечном счете, заключается в исходных данных (то есть в SocketChannel, из которого вы читаете данные).
2: объяснение возможных проблем
Если ваш сокет-канал исходит из файла REAL, который конечен, тогда ваш файл действительно большой, и в конечном итоге операция read () вернет 0 ... в конце концов ...
Если, с другой стороны, ваш сокет-канал прослушивает источник данных, который вы ОЖИДАЕТЕ, чтобы быть конечным (например, сериализованный объектный поток, например), я бы дважды проверил источник - возможно, ваш конечный поток просто производит все больше и больше данных ... и вы правильно их потребляете.
3: наконец, несколько советов
Хитрость для отладки ошибок этого типа заключается в том, чтобы поиграть с помощью ввода ByteBuffer в вашем методе чтения: хорошая вещь в ByteBuffers java.nio заключается в том, что, поскольку они более объектно-ориентированы, чем более старые пишущие байты [], вы можете очень тонкая отладка их операций.