首先,谈一下串行化的好处:
(1)在网络中传送对象。
(2)在程序的运行期间将对象保存于文件,或者稍后在相同的应用程序中写入然后读取对象。
实现对象串行化有两个前提:
(1)要串行化的对象对应的类必须实现Serializable接口。
(2)要串行化的对象对应的类必须是公共的(public)。
在Java中,有两个流类支持对象串行化:ObjectOutputStream和ObjectInputStream。
在对象串行化过程中,如果类中有某些域不想被串行化,则用transient修饰这些域。
下面是一个例子:
Customer.java
1
import java.io.*;
2
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
32
import java.io.*;2

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

32

ObjectIODemo.java
1
import java.io.*;
2
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
import java.io.*;2

3
public class ObjectIODemo {4
public static void main(String[] args) {5
try {6
ObjectOutputStream objectOut = new ObjectOutputStream7
(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 ObjectInputStream16
(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

运行结果:
生成了object.bin 文件
输出:
Name: 张三
ID: 00001
Password: null
Balance: 30000.0
Name: 李四
ID: 00002
Password: null
Balance: 10000.0


浙公网安备 33010602011771号