Как получить размер полученных данных SocketChannel

Я пишу сервер для своего приложения, который должен получать данные от клиента и делать что-то. Сообщение сделано с использованием SocketChannel, но есть проблема: я могу только прочитать ранее указанное количество байтов из него (как для Javadoc для channel.read(ByteBuffer dst))

Предпринята попытка прочитать до r байтов из канала, где r - это количество байтов, оставшихся в буфере.

Есть ли способ получить размер данных, которые в данный момент находятся в канале, и прочитать все это в byte[]?

2 ответа

есть проблема: я могу только прочитать ранее указанное количество байтов из него

Это не правильно.

(по состоянию на Javadoc для channel.read(ByteBuffer dst))

Предпринята попытка прочитать до r байтов из канала, где r - это количество байтов, оставшихся в буфере.

Вы пропустили слова "до". Нет проблем. Если доступен один байт, будет считан один байт независимо от количества места, оставшегося в ByteBuffer,

Есть ли способ получить размер данных, которые в данный момент находятся в канале, и прочитать все это в byte[]?

Именно так и происходит. Количество данных "в данный момент в канале" == количество данных, которые будут прочитаны при условии наличия места в ByteBuffer >= размер данных в буфере приема сокета, и это будет значение, возвращаемое read(),

Я думаю, что нет ни одного. Вы должны справиться с этим самостоятельно. Используете ли вы сериализованные объекты или вы создали собственный протокол?

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