java - 为什么我在使用 Kryo 时会收到此 NullPointerException?

标签 java nullpointerexception kryo

这是我使用的全部代码。

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 站点的示例代码。我还尝试使用 readClassAndObjectwriteClassAndObject 并出现相同的错误。

我尝试用谷歌搜索错误,但没有与此错误和 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/

相关文章:

java - Camel netty消费者不听

android - Camera.open 有时会返回 null

scala - 如何使用 Kryo 反序列化不可变集合?

java - 如何在具有特定时区的 ActionScript 中创建日期?

java - Eclipse : Cannot get a DefaultScreenDevice -> cannot launch any GUI 中的问题

Java Swing JEditorPane : manipulating styled documents

java - NullPointerException - android.view.Window.findViewById(int) - 为什么?

java - Boolean.valueOf() 有时会产生 NullPointerException

java - 如何通过 JMS 发送 Kryo 序列化对象?

java - 为什么即使没有无参数构造函数,我也无法序列化对象,即使它实现了 Serialized?