2015-04-05 63 views
2

我讀了一本書,他們說如果你不實現Serializable你不能序列化給定的對象。但是我沒有實現它就試用了它,它工作。下面是一些代碼:爲什麼如果我不實現序列化我仍然可以序列化一個對象?

import java.io.*; 

class SerializerTest { 
    private int a; 
    private int b; 

    public SerializerTest(int a, int b) { 
     this.a = a; 
     this.b = b; 
    } 

    public static void main(String[] args) { 
     try { 
      SerializerTest st = new SerializerTest(10, 20); 
      FileOutputStream fs = new FileOutputStream("st.ser"); 
      ObjectOutputStream os = new ObjectOutputStream(fs); 
      os.writeObject(st); 
     } catch (Exception e) {} 
    } 
} 

但我注意到,如果你實現Serializable的st.ser文件變得像小10倍。那麼爲什麼我可以序列化一些沒有實現Serializable的東西,以及爲什麼如果我實現它,文件會變得更短?

回答

1

方法ObjectOutputStream.writeObject接受Object類型的參數,而不是Serializable。這就是爲什麼編譯器不會抱怨並編譯程序的原因。

但是在運行期間,方法writeObject失敗並拋出NotSerializableException。在你的程序中,異常被捕獲並被忽略。只要嘗試加入catch區塊e.printStackTrace()即可查看。

(或事件越好,不要代碼換到try-catch可言,只是方法聲明更改爲public static void main(String[] args) throws IOException

相關問題