java - Kryonet BufferOverFlow 异常
问题描述
我正在尝试使用 KryoNet 库发送位图,但我一直收到此错误
com.esotericsoftware.kryo.KryoException: Buffer overflow. Available: 0, required: 1000000
Serialization trace:
mBuffer (android.graphics.Bitmap)
at com.esotericsoftware.kryo.io.ByteBufferOutput.require(ByteBufferOutput.java:189)
at com.esotericsoftware.kryo.io.ByteBufferOutput.writeBytes(ByteBufferOutput.java:283)
at com.esotericsoftware.kryo.io.ByteBufferOutput.writeBytes(ByteBufferOutput.java:269)
at com.esotericsoftware.kryo.serializers.DefaultArraySerializers$ByteArraySerializer.write(DefaultArraySerializers.java:36)
at com.esotericsoftware.kryo.serializers.DefaultArraySerializers$ByteArraySerializer.write(DefaultArraySerializers.java:25)
at com.esotericsoftware.kryo.Kryo.writeObjectOrNull(Kryo.java:577)
at com.esotericsoftware.kryo.serializers.ObjectField.write(ObjectField.java:68)
at com.esotericsoftware.kryo.serializers.FieldSerializer.write(FieldSerializer.java:495)
at com.esotericsoftware.kryo.Kryo.writeClassAndObject(Kryo.java:599)
at com.esotericsoftware.kryonet.Kr
这是我在服务器和客户端上使用的代码
serverKryo = new Server();
serverKryo.start();
serverKryo.addListener(listener);
try {
serverKryo.bind(5050, 5060);
Kryo kryo = serverKryo.getKryo();
kryo.register(Bitmap.class);
kryo.register(byte[].class);
kryo.register(String.class);
} catch (IOException e) {
e.printStackTrace();
}
}
客户端代码:
Thread kryoThread = new Thread(new Runnable() {
@Override
public void run() {
Client client = new Client(1000000,1000000);
client.start();
client.addListener(new Listener() {
@Override
public void connected(Connection connection) {
super.connected(connection);
Kryo kryo = client.getKryo();
kryo.register(Bitmap.class);
kryo.register(byte[].class);
kryo.register(String.class);
client.sendTCP(bitmap);
}
@Override
public void disconnected(Connection connection) {
super.disconnected(connection);
}
@Override
public void received(Connection connection, Object object) {
super.received(connection,object);
if (object instanceof String){
String result = (String) object;
XposedBridge.log(""+result);
}
}
});
try {
client.connect(5000, "192.168.1.15" , 5050, 5060);
} catch (IOException e) {
XposedBridge.log("problem in connect" );
}
}
});
我尝试了以下 1-我尝试使用构造函数增加 bufferSize 2-阻止执行直到 bufferSize i 大于所需的 bufferSize(这是一个坏主意,它是一个无限循环) 3-使用不同的端口 4-使用listener.connected 函数中的 sendTCP
解决方案
推荐阅读
- javascript - 如何在 jQuery 中初始化数据表以仅搜索奇数行而不搜索偶数行?
- django - Django 表单自定义字段左外连接
- git-bash - getopt 与 jdbc 连接字符串
- c++ - 如何在不调用析构函数的情况下将值移出 std:optional ?
- powershell - Importing a .csv after prompting for file path for AD account creation in Powershell
- javascript - 目的是什么在 React 类渲染函数中?
- flutter - 升级颤振后包无法在pub中解决
- mysql - 如何通过匹配列名将列数据从一个表复制到另一个表?在 SQL 或 Power Query 中
- vue.js - vue 组件中的 svg.js
- c++ - 什么是数据类型
::work_type 为?