问题1:什么是序列化与反序列化?
简单来说,序列化就是将JAVA对象转换成为二进制表示的字节数组,反序列化则是将字节序列还原为对象。
问题2:为什么要序列化?
有些场景下,我要将对象存储到数据库、磁盘或者通过网络接口发送,这时就需要将对象进行序列化。
问题3:如何实现序列化?
所有欲实现序列化的类,需要实现Serializable接口或Externalizable接口,我们可以使用ObjectOutputStream来进行对象的序列化,见代码:
Customer customer = new Customer("CICI",30);
ObjectOutputStream os = new ObjectOutputStream(new FileOutputStream(new File("/user/local/path/customer.txt")) );
os.writeObject(customer);
os.close();
在上述代码中,首先实例化了一个Customer对象,之后新建ObjectOutputStream流,通过writerObject方法将customer对象写入到文件中;
问题4:如果实现反序列化?
ObjectInputStream os = new ObjectInputStream(new FileInputStream(new File("/user/local/path/customer.txt")));
Customer customer = (Customer) os.readObject();
通过上述代码,即将对象从文件中还原,实现了反序列化。
问题5:序列化有哪些规则?
1)当父类实现了Serializable接口的时候,所有的子类都能序列化
2)子类实现了Serializable接口,父类没有,父类中的属性不能被序列化(不报错,但是数据会丢失)
3)如果序列化的属性是对象,对象必须也能序列化,否则会报错
4)反序列化的时候,如果对象的属性有修改或则删减,修改的部分属性会丢失,但是不会报错
5)在反序列化的时候serialVersionUID被修改的话,会反序列化失败