Я использую ByteToMessageCodec в своем проекте netty. Закодировать имеет следующую структуру:Как правильно работать с ByteToMessageCodec.encode и прямыми буферами
protected abstract void encode(
ChannelHandlerContext ctx,
I msg,
ByteBuf out
) throws Exception
В моем случае msg
это сообщение, которое держит directBuffer, которые пришли из другого канала и должен быть направлен.
Мои вопросы:
- Что является лучшей практики, если
out.isWritable()
ложно? out.writeBytes(myMessage.directBuffer)
копировать память, еслиout
также является прямым буфером?- Если он копирует память, могу ли я просто позвонить
ctx.writeAndFlush(myMessage.directBuffer)
, чтобы предотвратить копирование памяти?
Существует source by norman maurer, рассказывающий что-то об этой точной теме, но, похоже, память копирует буферы и не отвечает на все мои вопросы.
Могу ли я также копировать память, если я использую CompositeBuffers, заполненный прямыми буферами? –
да, если все они прямые –