Как получить размер полученных данных SocketChannel
Я пишу сервер для своего приложения, который должен получать данные от клиента и делать что-то. Сообщение сделано с использованием SocketChannel
, но есть проблема: я могу только прочитать ранее указанное количество байтов из него (как для Javadoc для channel.read(ByteBuffer dst)
)
Предпринята попытка прочитать до r байтов из канала, где r - это количество байтов, оставшихся в буфере.
Есть ли способ получить размер данных, которые в данный момент находятся в канале, и прочитать все это в byte[]
?
2 ответа
есть проблема: я могу только прочитать ранее указанное количество байтов из него
Это не правильно.
(по состоянию на Javadoc для
channel.read(ByteBuffer dst)
)Предпринята попытка прочитать до r байтов из канала, где r - это количество байтов, оставшихся в буфере.
Вы пропустили слова "до". Нет проблем. Если доступен один байт, будет считан один байт независимо от количества места, оставшегося в ByteBuffer
,
Есть ли способ получить размер данных, которые в данный момент находятся в канале, и прочитать все это в
byte[]
?
Именно так и происходит. Количество данных "в данный момент в канале" == количество данных, которые будут прочитаны при условии наличия места в ByteBuffer >= размер данных в буфере приема сокета, и это будет значение, возвращаемое read()
,
Я думаю, что нет ни одного. Вы должны справиться с этим самостоятельно. Используете ли вы сериализованные объекты или вы создали собственный протокол?