(java)ObjectInputStream反序列化对象的错误版本[重复]

||                                                                                                                   这个问题已经在这里有了答案:                                                      
已邀请:
        原因是如果同一对象被写入两次,则“ 0”将缓存对象引用并向流写入回引用。这意味着当您第二次调用ѭ1时,流实际上并未写入对象的新副本,它只是插入对已写入对象的引用。 您可以通过在两次写操作之间调用
ObjectOutputStream.reset
来防止这种情况。这告诉流丢弃所有缓存的引用。 这种行为似乎很奇怪,但是如果您尝试序列化具有循环引用的对象图(即,写对象A引用对象B,然后又引用对象B),则实际上有必要防止无限循环。     
        您正在使用ObjectInputStream的read()或readObject()吗?如果您使用的是read(),那么您只会得到一个字节的数据。尝试转换客户端
public void run()
{
  while(true)
  { 
    Test t = (Test)input.readObject();
    System.out.println(t.var);
  }
}
编辑:应该已经输入了。readObject();     
        我花了很多时间调试了一些这样的代码。 :) 我不确定解决该问题的正确方法是什么,但是如果您创建对象的新实例,或者只是对其进行clone(),则在发送该对象之前,代码应该可以正常工作。 好像VM识别出它正在接收的对象就是它已经拥有的对象,并且只是在客户端更新指针,而不必费心去检查是否有任何更改。 尝试...
public void actionPerformed(ActionEvent e)
{
    object.var++;
    //assuming your object supports clone()
    output.write(object.clone());
    output.flush();
    System.out.println(object.var);
}
    

要回复问题请先登录注册