java序列化-Serializable

代码:java

package code;

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

public class SerializableTest implements Serializable {
	private static final long serialVersionUID = 1L;
	private String name = "who";
	private int age = 24;

	public static void main(String[] args) {
		write();
		// read();
	}

	/**
	 * 将对象序列化
	 * 
	 * @author LiuJie
	 * @time 2016年7月23日 下午11:41:09
	 */
	public static void write() {
		try {
			// ObjectOutputStream能把Object输出成Byte流
			ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("D:\\Users\\杰\\Desktop\\out.txt"));// 输出流保存的文件名为
			SerializableTest obj = new SerializableTest();
			obj.age = 11;
			oos.writeObject(obj);
			oos.flush(); // 缓冲流
			oos.close(); // 关闭流
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	/**
	 * 反序列化
	 * 
	 * @author LiuJie
	 * @time 2016年7月23日 下午11:44:37
	 */
	public static void read()
	{
		ObjectInputStream oin = null;
		try {
			oin = new ObjectInputStream(new FileInputStream("D:\\Users\\杰\\Desktop\\out.txt"));
		} catch (FileNotFoundException e1) {
			e1.printStackTrace();
		} catch (IOException e1) {
			e1.printStackTrace();
		}
		SerializableTest obj = null;
		try {
			obj = (SerializableTest) oin.readObject();
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		System.out.println("name=" + obj.name);
		System.out.println("age=" + obj.age);
	}
}

序列化后的文件:code

读取文件反序列化:对象

name=promonkey
age=22接口

静态变量不会序列化,也就是说吧name或age变成static,反序列化后输出的值仍是当前类的静态变量值。it

transient关键字修饰的变量也不能被序列化,这个关键字就是为了让序列化时忽略一些不但愿序列化的值。io

父类实现序列化,子类自动实现序列化,不须要显式实现Serializable接口;class

序列化是深复制,变量对象的值也会序列化。import

相关文章
相关标签/搜索