使用非阻塞数据报通道可以安全扩展哪些解码器? 本质上,我需要从* ByteBuff转到String,然后我将代码将该字符串转换为对象。而且,这需要用解码器来完成。从对象到字符串,最后回到* ByteBuff。
我尝试过扩展ByteToMessageDecoder,但似乎Netty从不调用解码方法。所以我不确定这是否主要是数据报通道的问题或我对解码器的原理理解有问题......
以防这是我的一些代码
初始化器:
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();
// [...]
}
}
答案 0 :(得分:1)
要处理DatagramPacket,您需要使用MessageToMessageDecoder,因为ByteToMessageDecoder仅适用于ByteBuf。