我在我的代码中有一个非常奇怪的情况,我不明白,我正在发送一个对象,假设通过一个套接字发送O,然后我更改了对象中变量的值,然后再次发送它,但第二次在客户端打印它时,我得到了与第一个对象相同的值。
客户端代码:
while(true){
try{
order=(Order)ois.readObject();
System.out.println(order);
}服务器代码:
public void sendOrder(Order o){
try {
out.writeObject(o);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}main方法:
Server_Socket ss=new Server_Socket();
ss.sendOrder(o);
o.add(r2);
ss.sendOrder(o);在我发送之前,服务器端的值肯定会发生变化,但我不明白为什么在客户端没有显示r2添加到对象中。
发布于 2012-09-26 09:46:29
这些对象正由ObjectOutputStream缓存。要防止出现这种情况,请在每次写入后调用ObjectOutputStream.reset()。如果要发送不包含其他对象的简单对象,请使用writeUnshared()而不是writeObject()。
发布于 2012-09-26 09:44:33
这些对象正由IOStreams缓存。要解决此问题,请在将对象发回之前在服务器上创建深度克隆。当客户端从流中拉出对象时,它将具有不同的实例id,并且它将在客户端实际反序列化和实例化该对象。
有趣的东西。
https://stackoverflow.com/questions/12593310
复制相似问题