Java Socket:更改值后多次读取/接收同一实例:ObjectInputStream.readObject()

时间:2012-04-24 21:18:13

标签: java sockets object serialization

我正在开发一个带服务器的简单多人游戏。这个概念是在玩家每次转动之后将对象“游戏”发送给所有客户。它包含客户需要的所有信息。它第一次运作良好。第二次之后,客户端中对象的值不会更改。确认在服务器上更改了值,并且在读取之前我还在客户端将对象设置为null。我没有Java经验。是否有可能“Java”认为是因为它是同一个实例,它不会读取新值并只重新激活旧值(可能来自缓存)?

客户代码

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

服务器代码

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

游戏

public class Game implements Serializable {...}

如果您需要更多代码,请告诉我。感谢。

1 个答案:

答案 0 :(得分:2)

如果在不重置的情况下将同一个对象写入ObjectOutputStream,您将获得相同的对象。这就是Java Serialization处理任意对象图的方式。

要修复,最好使用新的ObjectOutputStream。您可以在其上拨打reset。或者使用不可变对象或使用其他东西进行序列化。