Я пишу декодер-обработчик для двоичного формата сообщения, который можно декодировать до последнего полного элемента сообщения в доступных байтах. Итак, если есть массив значений int64
, вы читаете максимальное число, кратное 8 байтам, которое меньше ByteBuf.readableBytes()
. Я использую netty 5.0.0.Alpha2.
Моя проблема в том, что похоже, что Netty отбрасывает непрочитанные байты, оставшиеся в ByteBuf
, а не добавляет к ним новые сетевые байты; это означает, что когда я пытаюсь возобновить декодирование, происходит сбой, так как отсутствуют байты и поврежден поток.
Существуют ли методы ChannelHandlerContext
, ByteBuf
или Channel
, которые я должен использовать для сохранения этих непрочитанных байтов? Или текущее/единственное решение сохранить их в пустом пространстве внутри обработчика самостоятельно? Я подозреваю, что буферный пул является причиной того, что для последующего чтения используется другой буфер.
Спасибо
Майкл
PS: я не заинтересован в использовании классов ReplayingDecoder
или ByteToMessageDecoder
, так как подгонка под них моей библиотеки декодера была бы слишком навязчивой (ИМХО).
.retain
перейдя кByteBuf
, если в нем все еще есть читаемые байты, и сохранив его дескриптор до следующего чтения, а затем обернув его и новыйByteBuf
в составной буфер. Я напишу что-нибудь в какой-то момент, если кто-то не придумает лучший ответ;) - person Michael_73   schedule 11.04.2015