圖一:
圖二:
圖三:
圖四:
示例代碼:
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 + "]";
}
}