2012-04-24 212 views
1

我正在開發一個帶有服務器的簡單多人遊戲。其概念是在玩家每轉一圈後向所有客戶發送對象「遊戲」。它包含客戶需要的所有信息。它第一次運作良好。第二次後,客戶端中的對象的值不會更改。確認服務器上的值已更改,並且在讀取之前,我還將客戶端上的對象設置爲null。我沒有Java經驗。是否有可能「Java」認爲是因爲它是相同的實例,它不會讀取新的值,只是重新激活舊值(可能來自緩存)?Java Socket:更改後多次讀取/接收同一實例值:ObjectInputStream.readObject()

客戶端代碼

this.game = null; 
this.game = (Game) ois.readObject(); 

服務器代碼

aCPS.get(i).oos.writeObject(game); 

遊戲

public class Game implements Serializable {...} 

請告訴我,如果你需要更多的代碼。謝謝。

+1

我們需要更多的代碼。 :) – Tudor 2012-04-24 21:19:54

回答

2

如果將同一對象寫入ObjectOutputStream而不進行重置,則會得到相同的對象。這是Java序列化處理任意對象圖的方式。

要修復,最好用新鮮的ObjectOutputStream。你可以撥打reset就可以了。或者使用不可變的對象或者使用別的序列化。

+0

或writeUnshared()。 – EJP 2012-04-25 00:45:29

+0

@EJB有點毫無意義和困惑。所有包含的對象仍將被共享。 – 2012-04-25 01:14:41

+0

它既沒有意義也沒有困惑,應該提到完整性。如果OP不關心包含的對象,或者沒有任何對象,那麼它與您提到的其他對象一樣好。 – EJP 2012-04-25 10:35:09

相關問題