我正在开发一个带有服务器的简单多人游戏。这个概念是在玩家每次回合后将对象“游戏”发送给所有客户端。它包含客户需要的所有信息。第一次效果很好。第二次之后,客户端中对象的值不会更改。已确认这些值在服务器上已更改,并且在读取之前我还在客户端将对象设置为 null。我对 Java 没有经验。 “Java”是否可能认为因为它是同一个实例,所以它不会读取新值而只是重新激活旧值(可能来自缓存)?
客户端代码
this.game = null;
this.game = (Game) ois.readObject();
服务器代码
aCPS.get(i).oos.writeObject(game);
游戏
public class Game implements Serializable {...}
如果您需要更多代码,请告诉我。谢谢。
最佳答案
如果您将相同的对象写入ObjectOutputStream
而不重置,您将获得相同的对象。这就是 Java 序列化处理任意对象图的方式。
要解决此问题,最好使用新的 ObjectOutputStream
。您可以对其调用reset
。或者使用不可变对象(immutable对象)或使用其他东西进行序列化。
关于Java 套接字 : Read/receive the same instance multiple times after change values: ObjectInputStream. readObject(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10306142/