【发布时间】:2023-03-25 22:11:01
【问题描述】:
我是 Netty 4.0.29 的新手,并试图使用 Kryo 作为序列化库来制作自定义对象编码器和对象解码器,但我无法使其工作。由于我是 Netty 的新手,也许这就是我搞砸了一些事情的原因。我正在使用 MessageToMessageEncoder 和 MessageToMessageDecoder
这是我的编码器 -
public class KryoEncoder extends MessageToMessageEncoder<Object>{
private Kryo kryo;
private Output output;
public KryoEncoder(Kryo kryo, int bufSize, int maxBufSize) {
this.kryo = kryo;
output = new Output(bufSize, maxBufSize);
}
@Override
protected void encode(ChannelHandlerContext ctx, Object msg,
List<Object> out) throws Exception {
output.clear();
kryo.writeClassAndObject(output, msg);
int total = output.position();
out.add(Unpooled.wrappedBuffer(output.getBuffer(), 0 , total));
}
}
这里是解码器-
public class KryoDecoder extends MessageToMessageDecoder<Object>{
private Kryo kryo;
private Input input;
public KryoDecoder (Kryo kryo) {
this.kryo = kryo;
input = new Input();
}
@Override
protected void decode(ChannelHandlerContext ctx, Object msg, List<Object> out) throws Exception {
ByteBuf buffer = (ByteBuf)msg;
byte[] ar = new byte[buffer.readableBytes()];
buffer.readBytes(ar);
input.read(ar, buffer.readerIndex(), buffer.readableBytes());
Object object = kryo.readClassAndObject(input);
buffer.readerIndex(input.position());
out.add(object);
}
}
这是抛出的短堆栈异常,我知道这是一个空指针异常,并且解码器中的字节数组有问题,但不确定是什么。
Caused by: java.lang.NullPointerException
at java.lang.System.arraycopy(Native Method)
at com.esotericsoftware.kryo.io.Input.read(Input.java:254)
at TestWithKryo.KryoDecoder.decode(KryoDecoder.java:31)
at io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:89)
... 14 more
解码时发生异常,我在发送编码对象时检查了编码器并检查了channelFuture,它没有抛出任何异常。
再次,因为我对netty真的很陌生,我可能做错了什么,所以请告诉我。
【问题讨论】: