面试题总结——对象序列化与反序列化
对象序列化:将内存中保存的对象变为二进制数据流的形式进行传输,或者是将其保存在文本中。
简单来说:
序列化:把对象转换为字节序列的过程
反序列化:把字节序列恢复为对象的过程
序列化的用途:
1、把对象的字节序列永久的保存在硬盘上(放在一个文件中),要取出的时候再反序列化为对象即可。
2、网络上传输对象
(对象->字节序列->网络传输(字节)->字节序列->对象)
序列化与反序列化的前提
需要被序列化的类必须实现java.io.Serializable接口
。
对象输出流:ObjectOutputStream,使用writeObject(Object obj)方法可对obj对象进行序列化,将得到的字节序列写入一个当前程序的输出流中。对象输出流需要和其他输出流(内存流/文件流…)配合使用。
对象输入流:ObjectInputStream,使用readObject()方法从一个源输入流中读取字节序列,再将该字节序列反序列化为一个对象,并将该对象返回。对象输入流也需要和其他输入流(内存流/文件流…)搭配使用。
对象序列化的过程:
1、创建一个对象输出流,它可以包装一个其他类型的输出流(eg:文件输出流)
2、通过对象输出流的writeObject()将对象->字节序列。
对象反序列化的过程:
1、 创建一个对象输入流,它可以包装一个其他类型的源输入流(eg:文件输入流)
2、通过对象输入流的readObject()将字节序列->对象。