通过 ObjectStreams 发送的对象不保留其字段值?

Posted

技术标签:

【中文标题】通过 ObjectStreams 发送的对象不保留其字段值?【英文标题】:Object sent via ObjectStreams do not keep their field values? 【发布时间】:2013-03-12 13:18:01 【问题描述】:

我一直在开发一个聊天客户端/服务器来熟悉 java,但我遇到了一个我不理解的逻辑错误。

我正在通过 ObjectOutputStream 发送一个对象(消息对象,请参阅参考资料),该对象包含字段和另一个对象,该对象具有 2 个字段(用户对象)。在发送之前,使用调试器,我知道每个字段都已正确设置。在接收端,一切都正确设置,除了 User 类的一个字段,它以某种方式重置为程序的另一个 User 对象的相同字段的值。我检查了他们是否出于某种原因没有共享引用,但是 UserReceived.equals(UserInProgram) 返回 false(没有覆盖 equals 方法)。

注意:客户端中用户的唯一其他实例(伪字段似乎正在擦除由于某种原因收到的那个)在另一个包中,并设置为私有。

相关代码:

消息类,通过流发送和接收:http://codepaste.net/tiuxu7

用户类,“伪”字段似乎由于某种原因被重置:http://codepaste.net/33m97j

显示我如何发送/接收对象的代码:http://codepaste.net/frxcv7

两者之间共享的服务器、客户端和库的完整源代码可以在 github.com/TisButMe 找到

【问题讨论】:

这些链接对我不起作用。如果您在问题中包含代码会更好。 【参考方案1】:

有点晚了,但我刚刚遇到了这个问题并解决了它。只需在您的ObjectOutputStream 上拨打reset 即可

【讨论】:

【参考方案2】:

听起来要重置的字段是static 字段。 static 字段未序列化,因为它们属于类而不是对象。请参阅this quetion 了解更多信息。

【讨论】:

以上是关于通过 ObjectStreams 发送的对象不保留其字段值?的主要内容,如果未能解决你的问题,请参考以下文章

什么会导致块在 ARC 下不保留引用的 Objective-C 对象?

object-c的内存管理机制

为啥在启用 ARC 的项目中不需要维护保留计数

iOS之2016面试题三

自己遇到的一些iOS面试题

iPhone Dev Objective-C - 对象被保留,我不知道在哪里