2011-06-05 30 views
0

我想重置ObjectOutPutStream来更新新的对象状态。但为什么它没有效果。下面的代码输出“BEFORE”而不是“AFTER”?我的代码有什么问题?重置ObjectOutPutStream以更新新的对象状态?


package test; 

import java.io.FileInputStream; 
import java.io.FileOutputStream; 
import java.io.IOException; 
import java.io.ObjectInputStream; 
import java.io.ObjectOutputStream; 
import java.io.Serializable; 

public class Serialization { 
    public static void main(String[] strs) { 
     String filename = "E:\\myObject.data"; 

     FileOutputStream fos = null; 
     ObjectOutputStream out = null; 
     MyObject myObject = new MyObject(); 
     try { 

      myObject.setValue("BEFORE"); 
      fos = new FileOutputStream(filename); 
      out = new ObjectOutputStream(fos); 
      out.writeObject(myObject); 
      out.reset(); 
      myObject.setValue("AFTER"); 
      out.writeObject(myObject); 
      out.close(); 
     } catch (IOException ex) { 
      ex.printStackTrace(); 
     } 
     try { 
      FileInputStream fis = null; 
      ObjectInputStream in = null; 
      fis = new FileInputStream(filename); 
      in = new ObjectInputStream(fis); 
      myObject = (MyObject) in.readObject(); 
      System.out.println(myObject.getValue()); 
      in.close(); 
     } catch (IOException ex) { 
      ex.printStackTrace(); 
     } catch (ClassNotFoundException ex) { 
      ex.printStackTrace(); 
     } 
    } 

    public static class MyObject implements Serializable { 

     private static final long serialVersionUID = 5222199410120362372L; 
     private String value; 

     public void setValue(String value) { 
      this.value = value; 
     } 

     public String getValue() { 
      return value; 
     } 
    } 
} 

 

enter image description here

回答

2

你正在编写一个对象的两个副本,但只有在阅读一个。如果你读了两个物体,你会看到BEFORE和AFTER。

+0

是的,你是对的。但是我对本文中的解释感到困惑http://java.sun.com/developer/technicalArticles/Programming/serialization/(在“在流中缓存对象”) – 2011-06-05 08:43:56

+1

尝试没有使用reset()和你的同样的测试将看到不同之处。 – 2011-06-05 09:44:53

+0

海..你的链接被破坏。 [this](http://www.javaworld.com/jw-07-2000/jw-0714-flatten.html?page=5)是指您所指的同一篇文章吗? – 2013-10-30 16:39:23