【问题标题】:Why am I getting this NullPointerException when using Kryo?为什么我在使用 Kryo 时会收到此 NullPointerException?
【发布时间】:2011-06-11 20:02:19
【问题描述】:

这是我正在使用的全部代码。

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 at ...

奇怪的是,这是来自 Kryo 网站的示例代码。我也尝试使用readClassAndObjectwriteClassAndObject 出现同样的错误。

我尝试用谷歌搜索该错误,但没有与此错误和 Kryo 相关的结果。关于 Kryo 的信息太少,这是关于 Kryo 在 SO 上的第四个问题。

【问题讨论】:

  • kryo.writeObject(buffer, pojo);不为我编译。我在唱 kryo-2.08-all.jar。

标签: java nullpointerexception kryo


【解决方案1】:

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

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

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

【讨论】:

  • @Ólafur:乔恩很棒,他通常会给出完美的答案:P
猜你喜欢
  • 2015-11-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-14
  • 2020-02-24
  • 2013-12-09
  • 2018-08-24
  • 1970-01-01
相关资源
最近更新 更多