序列化把对象以流的方式写入到文件中保存,和反序列化把文件中保存的对象,以流的方式读取出来使用Java

30 篇文章 1 订阅
11 篇文章 0 订阅

创建一个Person类,下面就以Person对象进行序列化和反序列化操作
**注意这里的private static final long serialVersionUID = 1L; 是给他指定了一个序列化id
serialVersionUID适用于Java的序列化机制。简单来说,Java的序列化机制是通过判断类的serialVersionUID来验证版本-致性的。 在 进行反序列化时,JVM会把传来的字节流中的serialVersionUID与本
地相应实体类的serialVersionUID进行比较,如果相同就认为是一致的, 可以进行反序列化,否则就会出现序列化版本不-致的异常,即是 InvalidCastExcept ion。
具体的序列化过程是这样的:例化操作的时候系统会把当前类的serialVersionUID写入到序列化文件中,当反序列化时系统会去检测文件中的serialVersionUID,判断它是否与当前类的
serialVersionUID-致,如果一致就说明序列化类的版本 与当前类版本是一样的, 可以反序列化成功,否则失败。
**

import java.io.Serializable;
/**
 * 使用序列化或者反序列化时,该类必须实现Serializable
 * @author 邱锦宏
 *
 */
public class Person implements Serializable{
	private static final long serialVersionUID = 1L;

	private String name;
	private int age;
	
	public Person() {
		// TODO Auto-generated constructor stub
	}

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

	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 [name=" + name + ", age=" + age + "]";
	}
	
	
}

序列化代码

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.ArrayList;
import java.util.Collections;

/*
	java. io. objectOutputStream extends OutputStream
	objectoutputstream :对象的序列化流
	作用:把对象以流的方式写入到文件中保存
	构造方法:
		objectoutputStream(OutputStream out)创建写入指定OutputStream 的objectOutputStream。
		参数:
			OutputStream out :字节输出流
	特有的成员方法:
		void write0bject(object obj) 将指定的对象写入objectOutputStream。
	使用步骤:
		1.创建objectoutputStream对象构造方法中传递字节输出流
		2.使用objectOutputstream对象中的方法writeobject,把对象写入到文件中
		3.释放资源
*/


public class Demo01_ObjectOutputStream {

	public static void main(String[] args)throws IOException, ClassNotFoundException {
		ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("C://File//person.txt"));
		Person p1 = new Person("小明",18);
		Person p2 = new Person("小红",16);
		Person p3 = new Person("小绿",20);
		Person p4 = new Person("小黑",15);
		ArrayList<Person> list = new ArrayList<>(); 
		Collections.addAll(list, p1,p2,p3,p4);
		oos.writeObject(list);
		
		oos.close();
	}
}

运行后,查看序列化生成的person文件,发现文件中的数据是乱码的,不要担心,这是正确的
序列化的文件

反序列化代码

import java.io.FileInputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.util.ArrayList;

/*
	java. io. object InputStream extends InputStream
	ObjectInputStream:对象的反序列化流
	作用:把文件中保存的对象,以流的方式读取出来使用
	构造方法:
	objectInputStream( InputStream in)创建从指定InputStream 读取的objectInputStream。
	参数:
	InputStream in:字节输入流
	特有的成员方法:
	object readobject() 从ObjectInputstream 读取对象。
	使用步骤:
	1.创建objectInputStream对象,构造方法中传递字节输入流
	2.使用objectInputStream对象中的方法readobject读取保存对象的文件
	3.释放资源
	4.使用读取出来的对象(打印)
*/

public class Demo02_ObjectInputStream {

	public static void main(String[] args) throws IOException, ClassNotFoundException{
		ObjectInputStream ois = new ObjectInputStream(new FileInputStream("C://File//person.txt"));
		
		Object obj = ois.readObject();
		//强制转换
		ArrayList<Person> list = (ArrayList<Person>)obj;
		for(Person person : list){
				System.out.println(person);
			}
		
		
		ois.close();
	}
}

输出截图
反序列化

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

兴奋の大公猴

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值