java.nio.BufferOverflowException

瀏覽次數:74 次
跳到第一則未讀訊息

Lóránt Viktor Gerber

未讀,
2017年3月15日 下午5:46:152017/3/15
收件者:kryonet-users
My Android application is throwing a BufferOverflowException, but I don't know why. I set the sizes in my constructor to a pretty large number, and I'm sending my data in 5000 byte chunks.
My constructor:
Client client = new Client(65536, 65536);

And I'm sending data like this:
InputStream inputStream = thisContext().getContentResolver().openInputStream(data.getData());
    String transferId = Math.random() + "RANDOM" + Math.random();
    BeginFileTransferRequest beginRequest = new BeginFileTransferRequest();
    beginRequest.id = transferId;
    beginRequest.size = inputStream.available();
    beginRequest.extension = "png";
    Log.i("FileTransfer", "Size: " + beginRequest.size + ", extension: " + beginRequest.extension);
    client.sendTCP(beginRequest);
    ByteArrayOutputStream buffer = new ByteArrayOutputStream();
    int nRead;
    byte[] byteData = new byte[5000];
    while ((nRead = inputStream.read(byteData, 0, byteData.length)) != -1) {
        buffer.write(byteData, 0, nRead);
        byte[] tempData = buffer.toByteArray();
        buffer.reset();
        SendByteRequest sendRequest = new SendByteRequest();
        sendRequest.data = tempData;
        sendRequest.id = transferId;
        client.sendTCP(sendRequest);
    }
    FinishTransferRequest finishRequest = new FinishTransferRequest();
    finishRequest.id = transferId;
    client.sendTCP(finishRequest);
    OpenCustomPictureRequest openRequest = new OpenCustomPictureRequest();
    openRequest.transferId = transferId;
    client.sendTCP(openRequest);
} catch (Exception e) {
    e.printStackTrace();
}

The Log:
W/System.err: com.esotericsoftware.kryo.KryoException: java.nio.BufferOverflowException
W/System.err: Serialization trace:
W/System.err: data (lorantgerber.lakineratclient.requests.SendByteRequest)
W/System.err:     at com.esotericsoftware.kryo.serializers.FieldSerializer$ObjectField.write(FieldSerializer.java:585)
W/System.err:     at com.esotericsoftware.kryo.serializers.FieldSerializer.write(FieldSerializer.java:213)
W/System.err:     at com.esotericsoftware.kryo.Kryo.writeClassAndObject(Kryo.java:571)
W/System.err:     at com.esotericsoftware.kryonet.KryoSerialization.write(KryoSerialization.java:50)
W/System.err:     at com.esotericsoftware.kryonet.TcpConnection.send(TcpConnection.java:192)
W/System.err:     at com.esotericsoftware.kryonet.Connection.sendTCP(Connection.java:59)
W/System.err:     at lorantgerber.lakineratclient.RatActivity$15.run(RatActivity.java:199)
W/System.err:     at java.lang.Thread.run(Thread.java:833)
W/System.err: Caused by: java.nio.BufferOverflowException
W/System.err:     at java.nio.Buffer.checkPutBounds(Buffer.java:183)
W/System.err:     at java.nio.ByteArrayBuffer.put(ByteArrayBuffer.java:266)
W/System.err:     at com.esotericsoftware.kryo.io.ByteBufferOutputStream.write(ByteBufferOutputStream.java:42)
W/System.err:     at com.esotericsoftware.kryo.io.Output.flush(Output.java:154)
W/System.err:     at com.esotericsoftware.kryo.io.Output.require(Output.java:134)
W/System.err:     at com.esotericsoftware.kryo.io.Output.writeBytes(Output.java:219)
W/System.err:     at com.esotericsoftware.kryo.io.Output.writeBytes(Output.java:205)
W/System.err:     at com.esotericsoftware.kryo.serializers.DefaultArraySerializers$ByteArraySerializer.write(DefaultArraySerializers.java:29)
W/System.err:     at com.esotericsoftware.kryo.serializers.DefaultArraySerializers$ByteArraySerializer.write(DefaultArraySerializers.java:18)
W/System.err:     at com.esotericsoftware.kryo.Kryo.writeObjectOrNull(Kryo.java:552)
W/System.err:     at com.esotericsoftware.kryo.serializers.FieldSerializer$ObjectField.write(FieldSerializer.java:570)
W/System.err: ... 7 more
Application terminated.


回覆所有人
回覆作者
轉寄
0 則新訊息