2016-10-25 1 views
0

を読んでアンダーフロー例外をバッファ原因:Kryoは、私はシリアル化しています

private byte[] serialize() 
{ 
    KryoPool pool = new KryoPool.Builder(factory).softReferences().build(); 
    Kryo kryo = pool.borrow(); 
    Output output = new Output(0, 1024); 
    kryo.writeClassAndObject(output, readsSetNode); 
    byte[] bytes = output.toBytes(); 
    output.close(); 
    pool.release(kryo); 
    return bytes; 
} 

とデシリアライズ:

KryoPool pool = new KryoPool.Builder(factory).softReferences().build(); 
     Kryo kryo = pool.borrow(); 

     Input input = new Input(bytes); 
     HashMap<NodeStorage, NodeStorage> deserialized = (HashMap<NodeStorage, NodeStorage>) kryo.readClassAndObject(input); 
     input.close(); 

     pool.release(kryo); 

ハッシュマップオブジェクトを正しく含む「非直列化」が、残念ながら、ログをバッファにスパムされますアンダーフロー例外: これは、アプリケーションをデバッグしようとすると発生します。 これは何らかの問題を引き起こすのか、その動作は正常ですか?

com.esotericsoftware.kryo.Kryo.KryoException:バッファアンダーフロー。 com.esotericsoftware.kryo.io.Input.require(Input.java:199) com.esotericsoftware.kryo.io.Input.readVarInt(Input.java:373) com.esotericsoftware.kryo.util。デフォルトClassClassResolver.readClass(DefaultClassResolver.java:127) at com.esotericsoftware.kryo.Kryo.readClass(Kryo.java:693) at com.esotericsoftware.kryo.Kryo.readClassAndObject(Kryo.java:804) at main。 (ServiceReplica。)。 java:214) at bftsmart.tom.core.DeliveryThread.deliverUnordered(DeliveryThread.java:289)bftsmart.communication.client.netty.NettyClientServerCommunicationSystemServerSideでbftsmart.communication.client.netty.NettyClientServerCommunicationSystemServerSide.channelRead0(NettyClientServerCommunicationSystemServerSide.java:184) でbftsmart.tom.core.TOMLayer.requestReceived(TOMLayer.java:290) で。 channelRead0(NettyClientServerCommunicationSystemServerSide.java:61)io.netty.channel.SimpleChannelInboundHandler.channelRead(SimpleChannelInboundHandler.java:105)で io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:292)で io.nettyで 。 .ioChannelRead(ByteToMessageDecoder.java:277)のchannelChildRead(AbstractChannelHandlerContext.java:278) channel.AbstractChannelHandlerContext.fireChannelRead。 io.netty.channel.AbstractChannelHandlerContext.fireChannelReadでio.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:292) でio.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:264) (AT io.netty.channel.nio.AbstractNioByteChannel $ NioByteUnsafe.read(AbstractNioByteChannel.java:131)10時 でio.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:962) でAbstractChannelHandlerContext.java:278) 。 io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:528) NioEventLoop.jav a:399) at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:371) at io.netty.util.concurrent.SingleThreadEventExecutor $ 2.run(SingleThreadEventExecutor.java:112) at io.netty .util.concurrent.DefaultThreadFactory $ DefaultRunnableDecorator.run(DefaultThreadFactory.java:137) at java.lang.Thread.run(スレッド。Javaの:745)

+0

、これはそれをですが、私はあなたの出力を構築しようとしたい場合はわかりません ' ByteArrayOutputStream'メソッドを呼び出します。 – Max

答えて

0
私は同じ問題を満たしていた

は、あなたはこのようなあなたのシリアル化機能を変更する必要があります。

private byte[] serialize() 
{ 
    KryoPool pool = new KryoPool.Builder(factory).softReferences().build(); 
    ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); 
    Kryo kryo = pool.borrow(); 
    Output output = new Output(byteArrayOutputStream); 
    kryo.writeClassAndObject(output, readsSetNode); 
    output.close(); 
    pool.release(kryo); 
    byte[] bytes = byteArrayOutputStream.toByteArray();; 
    return bytes; 
} 
関連する問題