本博文主要介绍Java
Java序列化的定义:
Java
Java序列化的实现:
将需要被序列化的类实现Serializable接口,然后使用一个输出流(如:FileOutputStream)来构造一个ObjectOutputStream(对象流)对象,使用其writeObject(Object
Java序列化的特点:
1. 如果某个类能够被串行化,其子类也可以被串行化。
2. 对于父类的处理,如果父类没有实现串行化接口,则其必须有默认的构造函数(即没有参数的构造函数)。否则编译的时候就会报错。在反串行化的时候,默认构造函数会被调用。但是若把父类标记为可以串行化,则在反串行化的时候,其默认构造函数不会被调用。这是因为Java
3. 声明为static和transient类型的成员数据不能被串行化。因为static代表类的状态,
Java序列化的接口:
1. ObjectOutput接口:它继承DataOutput接口并且支持对象的串行化,其内的writeObject()方法实现存储一个对象。
2. ObjectOutputStream类:它继承OutputStream类并且实现ObjectOutput接口。利用该类来实现将对象存储(调用ObjectOutput接口中的writeObject()方法)。
3. ObjectInput接口:它继承DataInput接口并且支持对象的串行化,其内的readObject()方法实现读取一个对象。4. ObjectInputStream类:它继承InputStream类并且实现ObjectInput接口。利用该类来实现读取一个对象(调用ObjectInput接口中的readObject()方法)。
Java的序列化算法
1. 将对象实例相关的类元数据输出。
2. 递归地输出类的超类描述直到不再有超类。
3. 类元数据完了以后,开始从最顶层的超类开始输出对象实例的实际数据值。
4. 从上至下递归输出实例的数据
Java序列化的实例:
User类
import
public
Long
userid = 0L; String
username = null; public
User(Long userid , String username){
this.userid
= userid; this.username
= username; }
}
Write类
import
import
import
import
public
public
static void main(String[] args) throws IOException{
FileOutputStream fos = new FileOutputStream("F:\\test.out");
ObjectOutputStream oos = new ObjectOutputStream(fos);
User u1 = new User(1L,"evan");
User u2 = new User(2L,"evan");
ArrayList u = new ArrayList();
u.add(u1);
u.add(u2);
oos.writeObject(u);//该方法描述了如何进行二进制转化,主要由writeObject0()执行
oos.flush();
oos.close();
}
}
Read类
import
import
import
import
public
public
static void main(String[] args) throws IOException,ClassNotFoundException {
FileInputStream
fis = new FileInputStream("F:\\test.out"); ObjectInputStream
oin = new ObjectInputStream(fis); ArrayList
al = (ArrayList) oin.readObject();//该方法描述了如何从二进制解析成对象,主要由ReadObject0()执行 for
(User u : al) {
System.out.println(u.userid);
System.out.println(u.username);
}
}
}
执行结果为:
1
evan
2
evan
由于博主知识有限,如有误,请指正点评,欢迎交流