我有以下代码显示了我的错误或误解。
我发送了相同的列表,但是在ObjectOutputStream上进行了修改。一次为[0],其他为[1]。但是当我阅读它时,我得到[0]两次。我认为这是由于我通过同一个对象发送而ObjectOutputStream必须以某种方式对其进行缓存这一事实造成的。
这项工作是否应该进行,还是应该提交错误?
导入java.io. *;
导入java.net。*;
导入java.util。*;
公共类OOS {
公共静态void main(String [] args)引发异常{
线程t1 =新线程(新Runnable(){
公共无效run(){
尝试{
ServerSocket ss = new ServerSocket(12344);
套接字s = ss.accept();
ObjectOutputStream oos = new ObjectOutputStream(s.getOutputStream());
列出相同= new ArrayList();
same.add(0);
oos.writeObject(same);
same.clear();
same.add(1);
oos.writeObject(same);
} catch(Exception e){
e.printStackTrace();
}
}
});
t1.start();
Socket s = new Socket(“ localhost”,12344);
ObjectInputStream ois = new ObjectInputStream(s.getInputStream());
//如预期输出[0]
System.out.println(ois.readObject());
//输出[0],但预期为[1]
System.out.println(ois.readObject());
System.exit(0);
}
}
最佳答案
流中有一个参考图,因此发送两次的对象不会在另一端给出两个对象,您只会得到一个。分别发送两次相同的对象将给您两次相同的实例(每个实例都具有相同的数据-这就是您所看到的)。
如果要重置图形,请参见reset()方法。