0

哪些解码器可以安全地与非阻塞数据报通道一起使用?本质上,我需要从 *ByteBuff 转到 String,然后我有代码可以将该字符串转换为对象。此外,这将需要使用解码器来完成。从对象到字符串,最后回到 *ByteBuff。

我曾尝试扩展 ByteToMessageDecoder,但似乎 Netty 从未调用 decode 方法。所以我不确定这主要是数据报通道的问题还是我对解码器的原理理解的问题......

以防万一这是我的一些代码

初始化器:

public class Initializer extends ChannelInitializer<NioDatagramChannel> {

    private SimpleChannelInboundHandler<Packet> sipHandler;

    public Initializer(SimpleChannelInboundHandler<Packet> handler) {
        sipHandler = handler;
    }

    @Override
    protected void initChannel(NioDatagramChannel chan) throws Exception {    
        ChannelPipeline pipe = chan.pipeline();    
        pipe.addLast("decoder", new SipDecoder());    
        pipe.addLast("handler", sipHandler);    
        pipe.addLast("encoder", new SipEncoder());
    }

}

我的解码器的开始:

public class SipDecoder extends ByteToMessageDecoder {

    private Packet sip;    

    @Override
    protected void decode(ChannelHandlerContext context, ByteBuf byteBuf, List<Object> objects) throws Exception {   
        System.out.println("got hit...");    
        String data = new String(byteBuf.array());    
        sip = new Packet();    
        // [...]
    }

}
4

1 回答 1

2

要处理 DatagramPacket,您需要使用 MessageToMessageDecoder,因为 ByteToMessageDecoder 仅适用于 ByteBuf。

于 2013-08-26T06:29:13.640 回答