2014-05-06 30 views
1
import java.io.FileInputStream; 
import java.io.FileOutputStream; 
import java.io.ObjectInputStream; 
import java.io.ObjectOutputStream; 
import java.io.Serializable; 

public class Manager { 

    public static void main(String[] args) throws Exception { 
     serialize(); 
     deSerialize(); 
    } 

    public static void serialize() throws Exception { 

     E obj = new E(); 
     obj.num = 100; 

     F f1 = new F(); 
     f1.j = 40; 
     f1.e1 = obj; 

     FileOutputStream fout = new FileOutputStream("test1.txt"); 
     ObjectOutputStream out = new ObjectOutputStream(fout); 
     out.writeObject(f1); 
    } 

    public static void deSerialize() throws Exception { 

     FileInputStream fin = new FileInputStream("test1.txt"); 
     ObjectInputStream in = new ObjectInputStream(fin); 
     F f2 = (F) in.readObject(); 

     System.out.println(f2.e1.num); 
     System.out.println(f2.j); 
    } 
} 

class E implements Serializable { 

    int num; 
} 

class F implements Serializable { 
    E e1; 
    int j; 
} 

//爲什麼我在本程序中遇到java.lang.NoSuchFieldError : num運行時錯誤。Java微妙序列化

+1

看起來像'num'字段在序列化到文件中時不在'E'類中。 –

+0

您的示例在OpenJDK-7上正常工作。 – Benjamin

+0

@Benjamin,我正在使用JDK-7和eclipse – Aamir

回答

0

我能想到的唯一解釋是你編譯了所有的代碼,然後從E中刪除'num'並重新編譯這個類,然後執行程序。所有提到的其他場景都會導致不同的例外情況。

完整的堆棧跟蹤會很有趣。請提供。將其編輯到您的問題中。