我正在开发一个带服务器的简单多人游戏。这个概念是在玩家每次转动之后将对象“游戏”发送给所有客户。它包含客户需要的所有信息。它第一次运作良好。第二次之后,客户端中对象的值不会更改。确认在服务器上更改了值,并且在读取之前我还在客户端将对象设置为null。我没有Java经验。是否有可能“Java”认为是因为它是同一个实例,它不会读取新值并只重新激活旧值(可能来自缓存)?
客户代码
this.game = null;
this.game = (Game) ois.readObject();
服务器代码
aCPS.get(i).oos.writeObject(game);
游戏
public class Game implements Serializable {...}
如果您需要更多代码,请告诉我。感谢。
答案 0 :(得分:2)
如果在不重置的情况下将同一个对象写入ObjectOutputStream
,您将获得相同的对象。这就是Java Serialization处理任意对象图的方式。
要修复,最好使用新的ObjectOutputStream
。您可以在其上拨打reset
。或者使用不可变对象或使用其他东西进行序列化。