Java对象序列化
当两个进程在进行远程通信时,彼此可以发送各种类型的数据。无论是何种类型的数据,都会以二进制序列的形式在网络上传送。发送方需要把这个Java对象转换为字节序列,才能在网络上传送;接收方则需要把字节序列再恢复为Java对象。 概念 序列化:把Java对象转换为字节序列的过程。 反序列化:把字节序列恢复为Java对象的过程。 序列化API java.io.ObjectOutputStream代表对象输出流,它的writeObject(Object obj)方法可对参数指定的obj对象进行序列化,把得到的字节序列写到一个目标输出流中。只有实现了Serializable接口的类的对象才能被序列化。 java.io.ObjectInputStream代表对象输入流,它的readObject()方法从一个源输入流中读取字节序列,再把它们反序列化为一个对象,并将其返回。
代码实例: Person.java import java.io.Serializable;
public class Person implements Serializable{
private static final long serialVersionUID = 1443686589302784335L;
//对象序列化操作
//1、要实现对象序列化操作,需要让Java中的类实现Serrializable接口
//2、利用ObjectOutputStream类进行对象序列化操作
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Person(String name) {
this.name = name;
}
}
TestObjectOutputStream.java import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.ArrayList;
public class TestObjectOutputStream {
//读取对象的顺序与写入时的顺序要一致。
public void oper(){
ObjectOutputStream oos = null;
try {
oos = new ObjectOutputStream(new FileOutputStream("d:\\object.txt"));
ArrayList<Person> list = new ArrayList<Person>();
//实例多个对象的时候用list或者数组实现 Person p = new Person("zhangsan");
Person p2 = new Person("lisi");
Person p3 = new Person("wangwu");
list.add(p);
list.add(p2);
list.add(p3);
oos.writeObject(list);
oos.writeObject("123");
//序列化String对象 oos.close();
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
public void input(){
ObjectInputStream ois = null;
try {
ois = new ObjectInputStream(new FileInputStream("d:\\object.txt"));
ArrayList<Person> list = (ArrayList<Person>) ois.readObject();
//对象读取顺序与实例化顺序一致 for(Person p:list){
System.out.println(p.getName());
}
System.out.println((String)ois.readObject());
ois.close();
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
TestObjectOutputStream t = new TestObjectOutputStream();
t.oper();
t.input();
}
}
|