Perché mi appare questo NullPointerException quando si utilizza Kryo?
-
26-10-2019 - |
Domanda
Ecco l'intero codice che sto utilizzando.
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());
La classe PlayerPOJO ha solo due galleggianti e dei metodi get per quelli.
L'errore che sto ottenendo è:
java.lang.NullPointerException a ...
La cosa strana è che questo è il codice di esempio dal sito Kryo. Ho anche cercato di readClassAndObject
utilizzata e writeClassAndObject
con lo stesso errore.
Ho cercato di google l'errore, ma non ci sono risultati relativi a questo errore e Kryo. C'è così poca informazione su Kryo che questa è la quarta domanda circa Kryo su SO.
Soluzione
Non è esattamente il codice di esempio ... perché il codice di esempio ha una "...", suggerendo normalmente faresti altro lavoro.
Il problema è che non si è mai "flipping" il buffer di byte, quindi non è la lettura dei dati che hai appena scritto. Ho il forte sospetto che se si cambia il codice per:
// 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...
... si può ben funzionare. La chiamata a capovolgere in modo efficace significa che la lettura successiva leggerà i dati che hai appena scritto. La chiamata a flip
non verificarsi in alcuni esempi di codice, tra l'altro -. Avere uno sguardo da vicino