java对象序列化

开发工具与关键技术:myeclipse
作者:清晨
撰写时间:7.28

/**
* 对象序列化
* 对象序列化的目标是将对象保存到磁盘中,或允许在网络中直接传输对象。 对象序列化机制允许把内存中的Java对象转换成平台无关的二进制流,
* 从而允许把这种二进制 流持久地保存在磁盘上, 通过网络将这种二进制流传输到另一个网络节点。
* 其他程序一旦获得了这种二进制流(无论是从磁盘中获取的,还是通过网络获取的), 都可以将这种二进制流恢复成原来的Java对象。
* 序列化的含义和意义
* 序列化机制允许将实现序列化的Java对象转换成字节序列,这些字节序列可以保存在磁盘上,
* 或通过网络传输,以备以后重新恢复成原来的对象。序列化机制使得对象可以脱离程序的运行而独立存在。
* 对象的序列化(Serialize)指将一个Java对象写入IO流中,与此对应的是,
* 对象的反序列化(Deserialize)则指从IO流中恢复该Java对象如果需要让某个对象支持序列化机制
* ,则必须让它的类是可序列化的(serializable)。
*
* @throws IOException
* @throws ClassNotFoundException
*
*/

序列化
public static void main(String[] args) throws ClassNotFoundException,
			IOException {
		// 序列化过程
		// ‐‐‐‐‐‐‐‐‐‐序列化过程‐‐‐‐‐‐‐‐‐
		System.out.println("‐‐‐‐‐‐‐‐‐‐序列化过程‐‐‐‐‐‐‐‐‐");
		// 创建实例
		Person person = new Person("小明", 20);
		// 实例化 FileOutputStream
		FileOutputStream out = new FileOutputStream("F:\\person.txt");
		// 实例化 ObjectOutputStream
		ObjectOutputStream outputStream = new ObjectOutputStream(out);
		// 周用ObjectOutputStream对象的writeObject()方法输出可序列化对象
		outputStream.writeObject(person);
		// 关闭 ObjectOutputStream
		outputStream.close();

	
	}
}

效果
在这里插入图片描述

反序列
	// 反序列
		// ‐‐‐‐‐‐‐‐‐‐反序列化过程‐‐‐‐‐‐‐‐‐‐
		System.out.println("‐‐‐‐‐‐‐‐‐‐反序列化过程‐‐‐‐‐‐‐‐‐‐");
		// 实例化 FileInputStream
		FileInputStream in = new FileInputStream("F:\\person.txt");
		// 实例化 ObjectInputStream
		ObjectInputStream inputStream = new ObjectInputStream(in);
		/**
		 * 必须指出的是,反序列化读取的仅仅是Java对象的数据, 而不是Java类, 因此采用反序列化恢复Java对象时,
		 * 必须提供该Java对象所属类的class文件, 否则将会引发ClassNotFoundException异常。
		 * 反序列化无须通过构造器来初始化Java对象。
		 */
		// readObject() 可以反序列化对象
		Person person2 = (com.gx.test.Person) inputStream.readObject();
		// 关闭 ObjectInputStream
		inputStream.close();
		System.out.println("name=" + person2.getName());
		System.out.println("age=" + person2.getAge());

效果
在这里插入图片描述

下面是对象必须Serializable,不然不能序列化

class Person implements Serializable {
	private int age;
	private String name;
	// 构造器
	public int getAge() {return age;}
	public Person(String name, int age) {
		this.age = age;
		this.name = name;
	}
	public Person() {}
	public void setAge(int age) {this.age = age;}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}

你可能感兴趣的:(Technology)