创建一个Person类,下面就以Person对象进行序列化和反序列化操作
**注意这里的private static final long serialVersionUID = 1L; 是给他指定了一个序列化id
serialVersionUID适用于Java的序列化机制。简单来说,Java的序列化机制是通过判断类的serialVersionUID来验证版本-致性的。 在 进行反序列化时,JVM会把传来的字节流中的serialVersionUID与本
地相应实体类的serialVersionUID进行比较,如果相同就认为是一致的, 可以进行反序列化,否则就会出现序列化版本不-致的异常,即是 InvalidCastExcept ion。
具体的序列化过程是这样的:例化操作的时候系统会把当前类的serialVersionUID写入到序列化文件中,当反序列化时系统会去检测文件中的serialVersionUID,判断它是否与当前类的
serialVersionUID-致,如果一致就说明序列化类的版本 与当前类版本是一样的, 可以反序列化成功,否则失败。
**
import java.io.Serializable;
/**
* 使用序列化或者反序列化时,该类必须实现Serializable
* @author 邱锦宏
*
*/
public class Person implements Serializable{
private static final long serialVersionUID = 1L;
private String name;
private int age;
public Person() {
// TODO Auto-generated constructor stub
}
public Person(String name, int age) {
super();
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "Person [name=" + name + ", age=" + age + "]";
}
}
序列化代码
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.ArrayList;
import java.util.Collections;
/*
java. io. objectOutputStream extends OutputStream
objectoutputstream :对象的序列化流
作用:把对象以流的方式写入到文件中保存
构造方法:
objectoutputStream(OutputStream out)创建写入指定OutputStream 的objectOutputStream。
参数:
OutputStream out :字节输出流
特有的成员方法:
void write0bject(object obj) 将指定的对象写入objectOutputStream。
使用步骤:
1.创建objectoutputStream对象构造方法中传递字节输出流
2.使用objectOutputstream对象中的方法writeobject,把对象写入到文件中
3.释放资源
*/
public class Demo01_ObjectOutputStream {
public static void main(String[] args)throws IOException, ClassNotFoundException {
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("C://File//person.txt"));
Person p1 = new Person("小明",18);
Person p2 = new Person("小红",16);
Person p3 = new Person("小绿",20);
Person p4 = new Person("小黑",15);
ArrayList<Person> list = new ArrayList<>();
Collections.addAll(list, p1,p2,p3,p4);
oos.writeObject(list);
oos.close();
}
}
运行后,查看序列化生成的person文件,发现文件中的数据是乱码的,不要担心,这是正确的
反序列化代码
import java.io.FileInputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.util.ArrayList;
/*
java. io. object InputStream extends InputStream
ObjectInputStream:对象的反序列化流
作用:把文件中保存的对象,以流的方式读取出来使用
构造方法:
objectInputStream( InputStream in)创建从指定InputStream 读取的objectInputStream。
参数:
InputStream in:字节输入流
特有的成员方法:
object readobject() 从ObjectInputstream 读取对象。
使用步骤:
1.创建objectInputStream对象,构造方法中传递字节输入流
2.使用objectInputStream对象中的方法readobject读取保存对象的文件
3.释放资源
4.使用读取出来的对象(打印)
*/
public class Demo02_ObjectInputStream {
public static void main(String[] args) throws IOException, ClassNotFoundException{
ObjectInputStream ois = new ObjectInputStream(new FileInputStream("C://File//person.txt"));
Object obj = ois.readObject();
//强制转换
ArrayList<Person> list = (ArrayList<Person>)obj;
for(Person person : list){
System.out.println(person);
}
ois.close();
}
}
输出截图