Если вы создали трубу, как это:получения двоичных данных после того, как вы установите StringDecoder в качестве трубопровода декодера
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);
}
Канал в основном текст, но иногда мне нужно читать сырой двоичный файл из него. В этом случае msg, входящий в него, является объектом String из-за StringDecoder в конвейере. Я хотел бы получить данные channelbuffer под этой строкой ...
На стороне сервера, данные были записаны с этим:
ChannelBuffer databuffer = ChannelBuffers.buffer(blobstream.size());
databuffer.writeBytes(blobstream.toByteArray());
e.getChannel().write(databuffer);
Похоже, я должен отключить stringencoder/декодер (который преобразует его в канал ChannelBuffer w/raw byte access) и преобразует байты в/из строк ...
Спасибо, Норман. FYI, я действительно избавился от StringDecoder/Encoder и теперь сам обрабатываю буферы каналов. Это было проще в моем случае, потому что мне не нужны специальные функции, специфичные для языка StringDecoder .... – kenyee