套接字和 Hasmap 对象

sockets and Hasmap objects

所以我尝试使用 eclipse 在 java 项目中进行服务器-客户端设置。 细节或多或少无关紧要,除了我试图来回传递 HashMap 对象。

我能够做到这一点,但是当服务器发送第一个 HashMap (HM1) 时,客户端将接受 HM1 并采取相应的行动。然而,当另一个 HashMap 进来时,客户端没有收到 HM2,而是 HM1,尽管反复验证服务器确实发送了 HM2 对象。

我后来通过发送 dos.ObjectOutputStream(HashMapObject.clone()) 而不是 dos.ObjectOutputStream(HashMapObject) 解决了这个问题,现在客户端获得了正确的数据。

请记住,我只通过连接到本地主机进行调试进行了测试。

现在我的问题是,我不明白为什么 .clone() 会有所不同,有人可以向我解释为什么吗?

在两次写入之间 ObjectOutputStream 使用 reset() 方法。

这种输出流类型实际上会缓存它所写入的对象,以在您最终多次写入同一个对象时节省带宽。调用 clone() 会有所不同,因为它会在发送前复制对象。但是,输出流也会缓存那些克隆的对象,这很快就会成为内存问题。