2015-04-05 42 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

相关问题