java序列化和反序列化

为什么JAVA要实现对象序列化?
简单来说序列化就是一种用来处理对象流的机制,所谓对象流也就是将对象的内容进行流化(就是I/O),我们可以对流化后的对象进行读写操作,也可将流化后的对象传输于网络之间(注:要想将对象传输于网络必须进行流化)。在对对象流进行读写操作时会引发一些问题,而序列化机制正是用来解决这些问题的!

 

代码演示:

第一步:创建我要序列化和反序列化的类:

package com.rocy.pojo;

import java.io.Serializable;

public class Person implements Serializable {
	private static final long serialVersionUID = 1L;
	private String name;
	private String city;
	private int age;
	private String describe;

	public Person(String name, String city, int age, String describe) {
		this.name = name;
		this.city = city;
		this.age = age;
		this.describe = describe;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getCity() {
		return city;
	}

	public void setCity(String city) {
		this.city = city;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}

	public String getDescribe() {
		return describe;
	}

	public void setDescribe(String describe) {
		this.describe = describe;
	}

	@Override
	public String toString() {
		return this.getName() + " " + this.getCity() + " " + this.getAge()+" "+this.describe +" "+serialVersionUID;
		
	}
}

 

 第二步:序列化和反序列化测试:

public class Test {
	public static void main(String[] args) throws Exception {
		// 序列化过程:
		// 1 使用FileOutputStream 输出流创建 ObjectOutputStream 从而对对象进行流操作
		ObjectOutputStream outObj = new ObjectOutputStream(
				new FileOutputStream("d://a.txt"));
		// 2 创建一个对象
		Person person = new Person("rocyx", "beijing", 20, "美女");
		// 3 将对象写入文件
		outObj.writeObject(person);
		// 4 刷新流中缓冲
		outObj.flush();
		// 5 关闭流
		outObj.close();
		// ---序列化 结束 。 这个时候就将流对象输出到了文件中了

		
		
		// 反序列化过程
		// 1 创建一个输入流
		ObjectInputStream inObj = new ObjectInputStream(new FileInputStream(
				"d://a.txt"));
		// 2 将文件中数据读取并返回对象
		Object obj = inObj.readObject();
		// 3 关闭流
		inObj.close();
		// --- 反序列化结束,这个时候可以打印该对象信息,该对象就是序列化到文件中的内容。
		obj = (Person) obj;
		System.out.println("[" + obj.toString() + "]");
	}

}

 

  对于不想被反序列化的字段可以用 transient 关键字,凡是使用transient 的字段在反序列化的时候都被忽略

  可以将Person的一个字段,如:private transient String city;

   再次运行Test,这个时候,city字段打印出null,没有被反序列化出来。

你可能感兴趣的:(java)