2011-06-11 115 views
1

這是我正在使用的完整代碼。爲什麼我在使用Kryo時遇到此NullPointerException?

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的信息太少,這是關於Kr​​yo的第四個問題。

+0

kryo.writeObject(buffer,pojo);不爲我編譯。我唱kryo-2.08-all.jar。 – Viren 2012-05-13 11:50:43

回答

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的呼叫確實發生在一些示例代碼中,順便說一句 - 仔細看看。

+0

愛你。你會在9分鐘內被接受。 <3 – 2011-06-11 20:08:23

+0

@Ólafur:喬恩很棒,他通常會給出完美的答案:P – 2011-06-11 20:16:26

+0

通常?不總是。 – 2011-06-11 20:19:29

相關問題