1、自定义可序列化类要求
- 需要实现接口:Serializable
- 当前类提供一个全局变量:serialVersionID (与版本有关)
- 内部所有属性也需要是可序列化的(默认情况下基本数据类型可序列化)
2、代码实现举例
package learn.stream;
import java.io.Serializable;
public class Person implements Serializable {
public static final long serialVersionID = 45555544454L;
private String name;
public int age;
public Person(String name, int age) {
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;
}
public Person() {
}
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
测试
package test;
import learn.stream.Person;
import org.junit.Test;
import java.io.*;
public class TestPerson {
/**
* 序列化过程
*/
@Test
public void test1(){
ObjectOutputStream objectOutputStream = null;
try {
//1、造文件
objectOutputStream = new ObjectOutputStream(new FileOutputStream("object1.dat"));
//2、流
objectOutputStream.writeObject(new Person("Tom",25));
objectOutputStream.flush();//刷新操作
objectOutputStream.flush();//刷新操作
} catch (IOException e) {
e.printStackTrace();
} finally {
if (objectOutputStream != null) {
try {
//3、关闭流
objectOutputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
/**
* 反序列化过程
*/
@Test
public void test2(){
ObjectInputStream objectInputStream = null;
try {
//1、造文件
//流
objectInputStream = new ObjectInputStream(new FileInputStream("object1.dat"));
Object obj = objectInputStream.readObject();
Person str = (Person) obj;
System.out.println(str);
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} finally {
if (objectInputStream != null) {
try {
//关闭流资源
objectInputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
结果: