Почему я получаю это исключение NullPointerException при использовании Kryo? - PullRequest
1 голос
/ 12 июня 2011

Вот весь код, который я использую.

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.Я также пытался использовать readClassAndObject и writeClassAndObject с той же ошибкой.

Я попытался погуглить ошибку, но нет результатов, касающихся этой ошибки и Kryo.О Kryo так мало информации, что это четвертый вопрос о Kryo на SO.

1 Ответ

7 голосов
/ 12 июня 2011

Это не в точности пример кода ... потому что в примере кода есть "...", указывающее, что вы обычно выполняете другую работу.

Проблема в том, что вы никогда не «переворачиваете» свой байтовый буфер, поэтому он не читает данные, которые вы только что написали. Я сильно подозреваю, что если вы измените свой код на:

// 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 происходит в некотором примере кода. Посмотрите внимательно.

...