这是我正在使用的完整代码。
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网站的示例代码。我还试图将readClassAndObject
和writeClassAndObject
用于同一错误。
我试图谷歌错误,但没有与此错误和Kryo相关的结果。关于Kryo的信息很少,这是关于Kryo的第四个问题。
答案 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
的调用会出现在某些示例代码中 - 请仔细查看。