Java 套接字 : Read/receive the same instance multiple times after change values: ObjectInputStream. readObject()

标签 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 {...}

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

最佳答案

如果您将相同的对象写入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/

相关文章:

java - 使用 Java Mail API 时出现问题

c++ - 使用 C++ 套接字发出 HTTP GET 请求时出现 301 错误

javascript - 使用 Math 的方法扩展窗口对象

实例化后可从方法访问的 Javascript 局部变量?

java - java中使用sin和cos让圆做圆周运动

java - Spring JDBCTemplate异常

java - 处理 OutOfMemoryError : Java heap space in SonarQube Compute Engine 的更好方法

java - 为什么我的代码总是转到 else 语句?

node.js - 在 Node js 应用程序中使用 cluster js 时,socketcluster 是否多余?

c# - 我可以在具有动态IP的C#中创建套接字服务器吗?