Java序列化

耗尽温柔 提交于 2020-02-29 03:50:12

1 序列化

1.1 序列化概述

Java中提供了一种序列化操作的方式,用一个字节序列化来表示一个对象,该字节序列化中保存了==【对象的属性】,【对象的类型】和【对象的数据】。把字节序列化保存到文件中,就可以做到持久化==保存数据内容。

从文件中读取字节序列化数据,可以直接得到对应的对象。
在这里插入图片描述

1.2 ObjectOutputStream类

将对象数据序列化,保存到文件中

构造方法 Constructor
ObjectOutputStream(OutputStream out);
输出字节流对象作为当前方法的参数


1.3 ObjectInputStream类

从文件中读取被序列化之后的字节数据,提供反序列化操作,得到一个对象。

构造方法 Constructor
ObjectInputStream(InputStream in);
需要提供一个字节输入流对象来进行操作


1.4 序列化注意事项

1. 如果一个类需要进行序列化操作,必须遵从。java.io.Serializable。不遵从无法进行序列化操作

2. 序列化之后从文件中读取序列化内容,转换成对应的对象,
ClassNotFoundException 对应类没有找到。
对应的类型没有导包,不存在…
InvalidClassException 类型不一样
序列化之后的每一个类都会有一个serialVersionUID,该编号在使用过程中,序列化
和反序列化必须一致

3. transient 修饰的成员变量不能被序列化

2 代码示例如下

Person.java

package com.qf.d_objectSerializable;

import java.io.Serializable;

public class Person implements Serializable{
	/**
	 * 序列化编号
	 */
	private static final long serialVersionUID = 1L;
	private int id;
	private String name;
	private int age;
	
	public Person() {
	}

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

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

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

	public int getAge() {
		return age;
	}

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

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

Demo1.java

package com.qf.d_objectSerializable;

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.util.ArrayList;

public class Dome2 {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		readList();
	}
	
	private static void readList() {
		ObjectInputStream objectInputStream = null;
		
		try {
			objectInputStream = new ObjectInputStream(new FileInputStream("G:\\test\\aaa\\person.txt"));
			ArrayList<Person> list = (ArrayList<Person>) objectInputStream.readObject();
			
			for (Person person : list) {
				System.out.println(person);
			}
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			if (objectInputStream != null) {
				try {
					objectInputStream.close();
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
		}
	}
	
	private static void writeList() {
		ArrayList<Person> persons = new ArrayList<Person>();
		
		persons.add(new Person(1, "老肖", 60));
		persons.add(new Person(2, "老刘", 66));
		persons.add(new Person(3, "老李", 61));
		persons.add(new Person(4, "老王", 56));
		persons.add(new Person(5, "老高", 55));
		
		ObjectOutputStream objectOutputStream = null;
		
		try {
			objectOutputStream = new ObjectOutputStream(new FileOutputStream("G:\\test\\aaa\\person.txt"));
			objectOutputStream.writeObject(persons);
			
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			if (objectOutputStream != null) {
				try {
					objectOutputStream.close();
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
		}
	}

}
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!