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

时间:2013-03-22 15:47:28

标签: java networking serialization objectoutputstream objectinputstream

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

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

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

代码的相关部分:

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

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

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

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

2 个答案:

答案 0 :(得分:0)

听起来重置的字段是static字段。 static字段未序列化,因为它们属于类而不是对象。有关详细信息,请参阅this quetion

答案 1 :(得分:0)

稍晚但我遇到了这个问题并解决了..只需在reset

上致电ObjectOutputStream