全屏

10.3.3 序列化/反序列化的步骤和实例


【专业IT培训机构,真正零首付入学www.bjsxt.com


【示例10-14】将Person类的实例进行序列化和反序列化

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;

//Person类实现Serializable接口后,Person对象才能被序列化
class Person implements Serializable {
	// 添加序列化ID,它决定着是否能够成功反序列化!
	private static final long serialVersionUID = 1L;
	int age;
	boolean isMan;
	String name;

	public Person(int age, boolean isMan, String name) {
		super();
		this.age = age;
		this.isMan = isMan;
		this.name = name;
	}

	@Override
	public String toString() {
		return "Person [age=" + age + ", isMan=" + isMan + ", name=" + name + "]";
	}
}

public class TestSerializable {
	public static void main(String[] args) {
		FileOutputStream fos = null;
		ObjectOutputStream oos = null;
		ObjectInputStream ois = null;
		FileInputStream fis = null;
		try {
			// 通过ObjectOutputStream将Person对象的数据写入到文件中,即序列化。
			Person person = new Person(18, true, "高淇");
			// 序列化
			fos = new FileOutputStream("d:/c.txt");
			oos = new ObjectOutputStream(fos);
			oos.writeObject(person);
			oos.flush();
			// 反序列化
			fis = new FileInputStream("d:/c.txt");
			// 通过ObjectInputStream将文件中二进制数据反序列化成Person对象:
			ois = new ObjectInputStream(fis);
			Person p = (Person) ois.readObject();
			System.out.println(p);
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			if (oos != null) {
				try {
					oos.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
			if (fos != null) {
				try {
					fos.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
			if (ois != null) {
				try {
					ois.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
			if (fis != null) {
				try {
					fis.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
	}
}

      执行结果如图10-19所示:

图10-19 示例10-14运行效果图.png

图10-19 示例10-14运行效果图

注意

      1. static属性不参与序列化。

      2. 对象中的某些属性如果不想被序列化,不能使用static,而是使用transient修饰。

      3. 为了防止读和写的序列化ID不一致,一般指定一个固定的序列化ID。

分类导航
点击按住视频可拖动

缩小

关闭

  • 正在学习
  • 北京总部地址:北京市海淀区西三旗街道建材城西路中腾建华商务大厦东侧二层尚学堂
  • 咨询电话:400-009-1906 010-56233821
  • Copyright 2007-2015 北京尚学堂科技有限公司
  • 京ICP备13018289号-1 京公网安备11010802015183