2013-03-17 81 views
0
public class ServerPipelineFactory implements ChannelPipelineFactory { 
    @Override 
    public ChannelPipeline getPipeline() throws Exception { 
     PacketFrameDecoder decoder = new PacketFrameDecoder(); 
     PacketFrameEncoder encoder = new PacketFrameEncoder(); 
     return Channels.pipeline(decoder, encoder, new Handler()); 
    } 
} 

和我的解码器读取字节的Netty服务器

public class PacketFrameDecoder extends 
     ReplayingDecoder<PacketFrameDecoder.DecoderState> { 
    public enum DecoderState { 
     READ_CONTENT; 
    } 

    private int length; 

    public PacketFrameDecoder() { 
     super(DecoderState.READ_CONTENT); 
    } 

    @Override 
    protected Object decode(ChannelHandlerContext chc, Channel chnl, 
      ChannelBuffer cb, DecoderState state) throws Exception { 
     switch (state) { 

     case READ_CONTENT: 

      for (int i = 0; i < cb.capacity(); i ++) { 
       byte b = cb.getByte(i); 
       System.out.println((char) b); 
      } 

      return null; 
     default: 
      throw new Error("Shouldn't reach here."); 
     } 
    } 
} 

我发送消息

Socket fromserver = new Socket("localhost", 7283); 
PrintWriter out = new PrintWriter(fromserver.getOutputStream(), true); 
int data = 12; 
out.write(data); 
out.flush(); 
out.close(); 
fromserver.close(); 

但是当我bytes- 我有cb.capacity()= 256 和消息“?0?0”System.out.println((char) b);

请帮忙

回答

1

使用容量错误它是缓冲区中“最大”字节数量。另外从位置0开始是错误的,因为readerIndex可能位于其他位置。请阅读ChannelBuffer的apidocs,这些都详细解释了这一点。