使用Kryo时为什么会出现此NullPointerException?

时间:2011-06-11 20:02:20

标签: 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类只有两个浮点数和那些的get方法。

我得到的错误是:

  

在...的java.lang.NullPointerException

奇怪的是,这是来自Kryo网站的示例代码。我还试图将readClassAndObjectwriteClassAndObject用于同一错误。

我试图谷歌错误,但没有与此错误和Kryo​​相关的结果。关于Kryo的信息很少,这是关于Kr​​yo的第四个问题。

1 个答案:

答案 0 :(得分:7)

它不是完全示例代码...因为示例代码有一个“...”表示您通常会做其他工作。

问题是,你永远不会“翻转”你的字节缓冲区,因此它不会读取你刚才写的数据。我强烈怀疑,如果您将代码更改为:

// 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 的调用会出现在某些示例代码中 - 请仔细查看。