序列化
什么叫对象序列化:??
我们都知道java 中无法保存一个对象到文本文件中,但是当我们有这种需求的时候,我们可以通过java 的序列化功能把当前对象的一些属性以二进制的形式保存到文件中。当我们需要这个对象的时,只需要从二进制文件中还原为保存前的对象即可。从这里我们可以得到启发,如果想把机器A 上的一个Student 对象发送到机器B 上,我们可以把Student 对象序列化成二进制,然后把该二进制发送给机器B ,机器B 就可以根据二进制数据还原成Student 对象了,这就变相的实现了在机器间传播对象的功能。
写入序列化数据到文件中,主要是两个对象,一个对象是FileOutputStream 对象,一个是ObjectOutputStream 对象,ObjectOutputStream 负责向指定的流中写入序列化的对象。当从文件中读取序列化数据时,主要需要两个对象,一个是FileInputStream ,一个是ObjectInputStream 对象,ObjectInputStream 负责从指定流中读取序列化数据并还原成序列化前得对象。另外,序列化的读取数据与写入的顺序相同,比如我们序列化时先写入数据A ,再写入B ,最后写入C ;那么我们再读取数据的时候,读取到的第一个数据为A ,读取到的第二个数据为B ,最后读取到的数据为C ,即:先写入先读取的原则。
在序列化一个对象的时候,这个对象必须实现java.io.Serializable 接口, Serializable 接口中不含任何方法,这个可以理解为声明该对象是可以序列化的方法吧。当我们在序列化一个对象时,有些属性我们不想序列化(可以减少数据量),那么我们可以声明该属性为瞬间态(用transient 关键字声明)。另外,静态字段也是不会被序列化的。
把一个对象变为二进制的数据流的一种方法,通过对象序列化可以方便的实现对象的传输或存储,其实就是为了保存在内存中的各种对象的状态,并且可以把保存的对象状态再读出来
什么情况下需要序列化 ??
把的内存中的对象保存到一个文件中或者数据库中时候
远程进行对象的传输
为什么要对对象进行序列化?
采用数据流来存储 ,以数据流传输会提高网络传输速度.
数据持久化的时候为什么要进行序列化?
当对象通过流进行读写操作时需要进行序列化,将对象的内容进行流化,就是为了更好的传输数据
序列化的实现原理?
1、输出序列化的头部信息
2、按照 子类到父类的顺序,递归的输出对象的描述信息,直到没有父类为止,类描述信息按照类元数据,类属性信息的顺序写入序列化流
3、按照父类到子类的顺序,递归的输出对象域的实际数据值。