我有一個位置類,我序列化多個客戶端和服務器之間。我有一個名爲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();
爲了澄清,在 「服務器」 比如我的遊戲世界實例被稱爲 「真實世界」。
部分代碼請 – Sarz
好的..我認爲這應該夠了。 –