图一:
图二:
图三:
图四:
示例代码:
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import org.junit.Test;
public class TestObjectInputOutputStream {
/*
* 对象的序列化过程:将内存中的对象通过ObjectOutputStream转换成二进制流,存储在硬盘文件中
*/
@Test
public void test1() {
TestObject t1 = new TestObject("小花",23,new TestSubObject("小明"));
TestObject t2 = new TestObject("小呆",22,new TestSubObject("大呆"));
ObjectOutputStream oos = null;
try {
oos = new ObjectOutputStream(new FileOutputStream("oos.txt"));
oos.writeObject(t1);
oos.writeObject(t2);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
if(oos != null) {
try {
oos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
/*
* 对象的反序列化过程:将硬盘中的文件通过ObjectInputStream转换成相应的对象
*/
@Test
public void test2() {
ObjectInputStream ois = null;
try {
ois = new ObjectInputStream(new FileInputStream("oos.txt"));
TestObject p1 = (TestObject) ois.readObject();
System.out.println(p1);
TestObject p2 = (TestObject) ois.readObject();
System.out.println(p2);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} finally {
if(ois != null) {
try {
ois.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
/*
* 要实现序列化的类:
* 1.要求此类是可序列化的,实现Serializable接口
* 2.要求类的属性同样的要实现Serializable接口
* 3.提供一个版本号:private static final long serialVersionUID
* 4.使用static或transient修饰的属性,不可实现序列化(不会报错,但是值都是空的)
*/
class TestObject implements Serializable {
/**
*
*/
private static final long serialVersionUID = 435658857576587L;
String name;//String类已实现Serializable接口
int age;//Integer类的父类Number类已实现Serializable接口
TestSubObject t;//TestSubObject也需要实现Serializable接口
public TestObject(String name, int age , TestSubObject t) {
super();
this.name = name;
this.age = age;
this.t = t;
}
@Override
public String toString() {
return "TestObject [name=" + name + ", age=" + age + ", t=" + t + "]";
}
}
class TestSubObject implements Serializable {
String name;
public TestSubObject(String name) {
super();
this.name = name;
}
@Override
public String toString() {
return "TestSubObject [name=" + name + "]";
}
}