Java--ObjectInputStream和ObjectOutputStream
1.这两个输入输出流的作用?
将Java对象写入到文件当中
2.什么是序列化和反序列化?
序列化:将 Java对象 由内存中写入 文件
反序列化:将 Java对象 由文件中读出来(读出来的对象可以使用多态机制,用一个object引用来指向)
3.待序列化的类要implements一个标识接口,Serializable。标识接口中没有定义任何的方法,只是起到标识的作用。JVM如果看到某个对象实现了某个标识接口,会对它特殊待遇
--“特殊待遇”:jvm会在创建对象的时候,给这个类添加一个属性: static final long serialVersionUID (序列化版本号)
4.在序列化存储对象的时候,JVM会生成一个序列化版本号。当这个类进行后续的升级变动之后,再使用的时候会生成一个新的序列化版本号。当两个序列化版本号不一致的时候,JVM会认为这是两个不兼容的类,就会报错
--解决办法:在创建要序列化的类的时候,就手动在类中创建一个序列化版本号的成员变量。这样就不会再产生兼容性的问题
5.如果不想让某属性参与序列化,使用transient关键字修饰即可。这样在反序列化的时候,该属性哪怕之前已经赋值,也会指向null