2014-12-22 80 views
-4

我有一個位置類,我序列化多個客戶端和服務器之間。我有一個名爲GameWorld的類,它包含了對象位置的數組。例如,玩家位置是一系列的位置。每個客戶端都有自己的GameWorld實例,服務器也是如此。Java序列化成員數組

在客戶端,客戶端的播放器位置被序列化併發送到服務器。在服務器端,一組4個位置記錄4個玩家的位置,並將其他3個玩家的位置發送給每個玩家。當我直接從GameWorld類序列化一個位置或一系列位置時,每個ObjectInputStream Position或Position []似乎都保留其初始值,而不考慮播放器的移動。然而,如果我將一個新的位置或位置[]作爲GameWorld成員變量的副本,它可以完美運行,並且玩家可以實時看到彼此的移動!這將會解決問題,但是我預見到,當我有幾十個甚至數百個要串行化的位置時,複製效率低下將會遇到麻煩。

總結一下這個問題,是什麼阻止了我直接從GameWorld類序列化Position數據結構?爲什麼在寫入ObjectOutputStream之前必須將其複製?

所以此工程:

Position [] temp = new Position[4]; 
       for(int i = 0; i < 4; i++) 
       { 
        temp[i] = server.realWorld.diggaPoses[i]; 
       } 
       positionOOS.writeObject(temp); 
       positionOOS.flush(); 

這不起作用:

positionOOS.writeObject(server.realWorld.diggaPoses); 

positionOOS.flush(); 

爲了澄清,在 「服務器」 比如我的遊戲世界實例被稱爲 「真實世界」。

+2

部分代碼請 – Sarz

+0

好的..我認爲這應該夠了。 –

回答

0
positionOOS.writeObject(server.realWorld.diggaPoses); 

試試這個:

positionOOS.writeUnshared(server.realWorld.diggaPoses); 

或:

positionOOS.reset(); 
positionOOS.writeObject(server.realWorld.diggaPoses); 

說明爲何的Javadoc。

+0

修復它。謝謝! –