0
如果您創建管這樣的:得到的二進制數據設置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);
}
通道主要是文字,但有時我需要閱讀原始二進制出來。 在這種情況下,由於管道中的StringDecoder,進來的msg是一個String對象。我想獲得的數據ChannelBuffer類型該字符串之下......
在服務器端,數據被寫入這一點:
ChannelBuffer databuffer = ChannelBuffers.buffer(blobstream.size());
databuffer.writeBytes(blobstream.toByteArray());
e.getChannel().write(databuffer);
貌似我不得不關掉stringencoder /解碼器(它將其轉換爲ChannelBuffer(帶有原始字節訪問)並將字節轉換爲字符串/從字符串中轉換字節...
謝謝,諾曼。僅供參考,我最終擺脫了StringDecoder/Encoder,現在自己處理通道緩衝區。在我的情況下更容易,因爲我不需要StringDecoder的特殊語言特性.... – kenyee 2012-01-23 17:10:11