首先,谈一下串行化的好处:
(1)在网络中传送对象。
(2)在程序的运行期间将对象保存于文件,或者稍后在相同的应用程序中写入然后读取对象。
实现对象串行化有两个前提:
(1)要串行化的对象对应的类必须实现Serializable接口。
(2)要串行化的对象对应的类必须是公共的(public)。
在Java中,有两个流类支持对象串行化:ObjectOutputStream和ObjectInputStream。
在对象串行化过程中,如果类中有某些域不想被串行化,则用transient修饰这些域。
下面是一个例子:
Customer.java
1
import java.io.*;
2![](/Images/OutliningIndicators/None.gif)
3
public class Customer implements Serializable {
4
private String name, ID;
5
transient private String password;
6
private float balance;
7
8
public Customer(String name, String ID, String password, float balance) {
9
this.name = name;
10
this.ID = ID;
11
this.password = password;
12
this.balance = balance;
13
}
14
15
public String getName() {
16
return name;
17
}
18
19
public String getID() {
20
return ID;
21
}
22
23
public String getPassword() {
24
return password;
25
}
26
27
public float getBalance() {
28
return balance;
29
}
30
}
31![](/Images/OutliningIndicators/None.gif)
32![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
2
![](/Images/OutliningIndicators/None.gif)
3
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
4
![](/Images/OutliningIndicators/InBlock.gif)
5
![](/Images/OutliningIndicators/InBlock.gif)
6
![](/Images/OutliningIndicators/InBlock.gif)
7
![](/Images/OutliningIndicators/InBlock.gif)
8
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
9
![](/Images/OutliningIndicators/InBlock.gif)
10
![](/Images/OutliningIndicators/InBlock.gif)
11
![](/Images/OutliningIndicators/InBlock.gif)
12
![](/Images/OutliningIndicators/InBlock.gif)
13
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
14
![](/Images/OutliningIndicators/InBlock.gif)
15
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
16
![](/Images/OutliningIndicators/InBlock.gif)
17
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
18
![](/Images/OutliningIndicators/InBlock.gif)
19
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
20
![](/Images/OutliningIndicators/InBlock.gif)
21
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
22
![](/Images/OutliningIndicators/InBlock.gif)
23
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
24
![](/Images/OutliningIndicators/InBlock.gif)
25
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
26
![](/Images/OutliningIndicators/InBlock.gif)
27
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
28
![](/Images/OutliningIndicators/InBlock.gif)
29
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
30
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
31
![](/Images/OutliningIndicators/None.gif)
32
![](/Images/OutliningIndicators/None.gif)
ObjectIODemo.java
1
import java.io.*;
2![](/Images/OutliningIndicators/None.gif)
3
public class ObjectIODemo {
4
public static void main(String[] args) {
5
try {
6
ObjectOutputStream objectOut = new ObjectOutputStream
7
(new BufferedOutputStream(new FileOutputStream("object.bin")));
8
9
Customer cust = new Customer("张三", "00001", "1234", 30000);
10
objectOut.writeObject(cust);
11
cust = new Customer("李四", "00002", "5678", 10000);
12
objectOut.writeObject(cust);
13
objectOut.close();
14
15
ObjectInputStream objectIn = new ObjectInputStream
16
(new BufferedInputStream(new FileInputStream("object.bin")));
17
18
cust = (Customer)objectIn.readObject();
19
display(cust);
20
21
cust = (Customer)objectIn.readObject();
22
display(cust);
23
24
objectIn.close();
25
}
26
catch(NotSerializableException e) {
27
System.out.println(e.getMessage());
28
}
29
catch(ClassNotFoundException e) {
30
System.out.println(e.getMessage());
31
}
32
catch(IOException e) {
33
System.out.println(e.getMessage());
34
}
35
}
36
37
private static void display(Customer cust) {
38
System.out.println("Name: " + cust.getName());
39
System.out.println("ID: " + cust.getID());
40
System.out.println("Password: " + cust.getPassword());
41
System.out.println("Balance: " + cust.getBalance());
42
}
43
}
44![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
2
![](/Images/OutliningIndicators/None.gif)
3
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
4
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
5
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
6
![](/Images/OutliningIndicators/InBlock.gif)
7
![](/Images/OutliningIndicators/InBlock.gif)
8
![](/Images/OutliningIndicators/InBlock.gif)
9
![](/Images/OutliningIndicators/InBlock.gif)
10
![](/Images/OutliningIndicators/InBlock.gif)
11
![](/Images/OutliningIndicators/InBlock.gif)
12
![](/Images/OutliningIndicators/InBlock.gif)
13
![](/Images/OutliningIndicators/InBlock.gif)
14
![](/Images/OutliningIndicators/InBlock.gif)
15
![](/Images/OutliningIndicators/InBlock.gif)
16
![](/Images/OutliningIndicators/InBlock.gif)
17
![](/Images/OutliningIndicators/InBlock.gif)
18
![](/Images/OutliningIndicators/InBlock.gif)
19
![](/Images/OutliningIndicators/InBlock.gif)
20
![](/Images/OutliningIndicators/InBlock.gif)
21
![](/Images/OutliningIndicators/InBlock.gif)
22
![](/Images/OutliningIndicators/InBlock.gif)
23
![](/Images/OutliningIndicators/InBlock.gif)
24
![](/Images/OutliningIndicators/InBlock.gif)
25
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
26
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
27
![](/Images/OutliningIndicators/InBlock.gif)
28
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
29
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
30
![](/Images/OutliningIndicators/InBlock.gif)
31
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
32
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
33
![](/Images/OutliningIndicators/InBlock.gif)
34
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
35
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
36
![](/Images/OutliningIndicators/InBlock.gif)
37
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
38
![](/Images/OutliningIndicators/InBlock.gif)
39
![](/Images/OutliningIndicators/InBlock.gif)
40
![](/Images/OutliningIndicators/InBlock.gif)
41
![](/Images/OutliningIndicators/InBlock.gif)
42
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
43
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
44
![](/Images/OutliningIndicators/None.gif)
运行结果:
生成了object.bin 文件
输出:
Name: 张三
ID: 00001
Password: null
Balance: 30000.0
Name: 李四
ID: 00002
Password: null
Balance: 10000.0