2
我是新來的Netty 4.0.29,並努力使自定義對象編碼器,並使用KRYO作爲序列化庫對象解碼器,我無法使它工作。因爲我是Netty的新手,也許這就是我搞亂某些東西的原因。我使用MessageToMessageEncoder和MessageToMessageDecoderNetty的編碼器和解碼器使用KRYO系列化
這裏是我的編碼器 -
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,並沒有拋出任何異常時,會發生。再次
,因爲我真正的新網狀我可能做的東西真的錯了,所以請讓我知道。
也可以你只要給我,爲什麼我的解決辦法是行不通的,因爲我想知道什麼是我做錯了一個簡短的說明。 – Sneh
主要問題是使用input.read(ar,buffer.readerIndex(),buffer.readableBytes());'。您嘗試從輸入中的緩衝區中讀取,此時該值爲null。 –
我沒有接受你的答案,因爲一旦我連接3個客戶端,解碼器就會彈出。對象對象= kryo.readClassAndObject(input);在解碼器的這一行拋出一個空指針異常 Object object = kryo.readClassAndObject(input); – Sneh