1. 什么是序列化
序列化是一种将对象以一连串的字符描述的过程,用于解决在对对象流进行读写操作时引发的问题。序列化可以将对象的状态卸载流里进行网络传输,或者保存到文件、数据库等系统中,并在需要时把该流读取出来重新构造一个相同的对象
2.如何实现序列化
所有要实现序列化的类都必须实现Serializable接口,接口中没有包含任何方法。使用一个输出流(如FileOutputStream)来构造一个ObjectOutputStream(对象流)对象,随后使用该对象的writeObject方法就可以将object对象写出(即保存其状态),要恢复时可以使用对应的输入流。
3.序列化的特点
(1)如果一个类能被序列化,那么它的子类也能被序列化
(2)由于static代表类的成员,transient代表对象的临时数据,因此生命这两种类型的数据成员不能被序列化
4.序列化实例
package pck;
import java.io.*;
import java.util.Date;
public class TestCode implements Serializable{
private String name;
private int age;
public TestCode(){
this.name="hello";
this.age=23;
}
public int getAge()
{
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public static void main(String [] agrs)
{
TestCode testCode=new TestCode();
ObjectOutputStream objectOutputStream=null;
ObjectInputStream objectInputStream=null;
try {
FileOutputStream fileOutputStream=new FileOutputStream("test.out");
objectOutputStream=new ObjectOutputStream(fileOutputStream);
objectOutputStream.writeObject(testCode);
objectInputStream.close();
}catch (Exception e){
}
TestCode testCode1;
try {
FileInputStream fileInputStream=new FileInputStream("test.out");
objectInputStream=new ObjectInputStream(fileInputStream);
testCode1=(TestCode)objectInputStream.readObject();
System.out.println("name:"+testCode1.getName());
System.out.println("age:"+testCode1.getAge());
objectInputStream.close();
}
catch (Exception e)
{
}
}
}
结果为:
name:hello
age:23
5.什么情况下需要使用序列化
(1)需要通过网络来发送对象或对象的状态需要被持久化到数据库或文件中
(2)序列化能实现深复制,即可以复制引用的对象