Если вы создали свою трубу так:
pipeline.addLast("decoder", new StringDecoder());
pipeline.addLast("encoder", new StringEncoder());
Есть ли способ получить необработанные данные из конвейера, который обычно обрабатывает текст?
Я бы очень хотел сделать это:
public void messageReceived(ChannelHandlerContext ctx, MessageEvent e) {
// Save data received from the server.
Object msg = e.getMessage();
byte[] rawdata = new byte[((ChannelBuffer)msg).readableBytes()];
((ChannelBuffer)msg).getBytes(0, rawdata);
tmpTarFile.write(rawdata);
}
Канал в основном текстовый, но иногда мне нужно прочитать из него необработанный двоичный файл.
В этом случае входящее сообщение является объектом String из-за StringDecoder в конвейере. Я хотел бы получить данные о канальном буфере под этой строкой ...
На стороне сервера данные записывались так:
ChannelBuffer databuffer = ChannelBuffers.buffer(blobstream.size());
databuffer.writeBytes(blobstream.toByteArray());
e.getChannel().write(databuffer);
Похоже, мне нужно отключить stringencoder / decoder (который преобразует его в ChannelBuffer с необработанным байтовым доступом) и конвертировать байты в / из строк ...