1

这是我正在使用的整个代码。

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 的信息很少,这是关于 Kryo 在 SO 上的第四个问题。

4

1 回答 1

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 确实发生在一些示例代码中 - 仔细看看。

于 2011-06-11T20:07:19.133 回答