序列化:把对象转换成字节序列的过程叫做序列化
反序列化:把字节序列转换为对象的过程叫做反序列化
Java序列化对象的方式:
1:Java序列化的默认API
通过java.io.ObjectOutputStream对象输出流的writeObject(Object obj)方法可对参数指定的obj对象进行序列化,把得到的字节序列写到一个目标输出流中。
通过java.io.ObjectInputStream对象输入流的readObject()方法从一个源输入流中读取字节序列,再把它们反序列化为一个对象,并将其返回,返回时通过强制类型转换赋值给具体的类对象引用。
2:让对象可以被序列化的三种方式
1)默认序列化:定义类时实现Serializable接口即可,这个Serializable接口是一个空接口,没有需要实现的方法。作用是标记该类的对象可以被序列化,启用其序列化功能。通过调用ObjectOutputStream和ObjectInputStream的方法来对该对象进行序列化和反序列化。
2)类自定义序列化方式一:定义类时,实现Serializable接口,并在类中定义:
private void writeObject(java.io.ObjectOutputStream out)
throws IOException
private void readObject(java.io.ObjectInputStream in)
throws IOException, ClassNotFoundException;
这两个方法,在方法中通过对象输入流参数、对象输出流参数进行自定义的内容输出。这样通过对象输出流和对象输入流的输入输出方法序列化和反序列化对象时
会自动调用类中定义的writeObject和readObject方法而不是默认的序列化和反序列化方法。
3)类自定义序列化方式二:实现Externalnalizable接口(继承自 Serializable接口),并且在类中实现readExternal(ObjectInput in)和writeExternal(ObjectOutput out)方法,在方法中定义类对象自定义
的序列化和反序列化操作。这样通过对象输出流和对象输入流的输入输出方法序列化和反序列化对象时会自动调用类中定义的readExternal
实现序列化,满足的条件
1.实现接口:serializable标识接口
2.对象所在的类提供常量:序列版本号
3.要求对象的属性也必须是可序列化的,(基本数据类型String)