问题描述
||
这个问题已经在这里有了答案:
解决方法
原因是如果同一对象被写入两次,则“ 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);
}