这是我使用的全部代码。
Kryo kryo = new Kryo();
kryo.register(PlayerPOJO.class);
ByteBuffer buffer = ByteBuffer.allocateDirect(256);
PlayerPOJO pojo = new PlayerPOJO(1.0f, 1.0f);
kryo.writeObject(buffer, pojo);
PlayerPOJO player = kryo.readObject(buffer, PlayerPOJO.class);
System.out.println(player.getX() + ":" + player.getY());
PlayerPOJO 类只有两个 float 和它们的 get 方法。
我得到的错误是:
java.lang.NullPointerException at ...
奇怪的是,这是来自 Kryo 站点的示例代码。我还尝试使用 readClassAndObject
和 writeClassAndObject
并出现相同的错误。
我尝试用谷歌搜索错误,但没有与此错误和 Kryo 相关的结果。关于 Kryo 的信息太少了,这是 SO 上关于 Kryo 的第 4 个问题。
最佳答案
不完全是示例代码...因为示例代码中有一个“...”,表明您通常会做其他工作。
问题是,您永远不会“翻转”您的字节缓冲区,因此它不会读取您刚刚写入的数据。我强烈怀疑如果您将代码更改为:
// Code as before...
kryo.writeObject(buffer, pojo);
// This call is all that's new
buffer.flip();
PlayerPOJO player = kryo.readObject(buffer, PlayerPOJO.class);
// Code as before...
...它很可能只是工作。有效地调用 flip 意味着下一次读取将读取您刚刚写入的数据。对 flip
的调用 确实 出现在一些示例代码中,顺便说一下 - 请仔细查看。
关于java - 为什么我在使用 Kryo 时会收到此 NullPointerException?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6318232/