欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

序列化与反序列化复习

程序员文章站 2022-03-11 17:46:29
...

序列化与反序列化应用场景:
场景一:内存对象需要在其它环境下使用
两个进程间进行网络通信时,无论是发送何种类型的数据,均需以二进制序列形式进行传送
发送方必须将数据对象(比如Java对象)转化为字节序列
接收方则需要将接收到的字节序列再还原成Java对象
场景二:内存对象需要在将来某个时间使用
将内存中的数据对象永久存储在磁盘中(持久化)
序列化与反序列化应用步骤:
序列化与反序列化复习
序列化与反序列化复习
案例要求:学员对象的序列化和反序列化

package cn.kgc.tangcco.chengxiangjain.xuliehua;

import java.io.Serializable;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@AllArgsConstructor
@NoArgsConstructor
public class Student implements Serializable {
	private static final long serialVersionUID = -1534711655988290883L;// 只是一个序列化的标识
	private String name;
	private int age;
	private String gender;
	private String password;

}
package cn.kgc.tangcco.chengxiangjain.xuliehua;

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

public class SerializableObj {
	public static void main(String[] args) {
		//支持把对象写入到文件中----对象转为有序的字节数组过程(序列化过程)
		ObjectOutputStream oos=null;
		//支持把文件内容读后转为对象----文件内容是字节数组读取后转为对象(反序列化过程)
		ObjectInputStream ois=null;
		try {
			//--------------------------------序列化过程
			System.out.println("*******************序列化******************");
			// 创建ObjectOutputStream输出流
			oos=new ObjectOutputStream(new FileOutputStream("D:\\test.txt"));
			//准备了一个学生对象
			Student student=new Student("张飞", 20, "男", "1234");
			System.out.println("姓名为:"+student.getName());
			System.out.println("年龄为:"+student.getAge());
			System.out.println("性别为:"+student.getGender());
			System.out.println("密码为:"+student.getPassword());
			// 对象序列化,写入输出流
			//这个方法就是把对象写入到文件中(序列化步骤)
			oos.writeObject(student);
			//---------------------------------反序列化
			System.out.println("*******************反序列化******************");
			//创建ObjectInputStream输入流
			ois=new ObjectInputStream(new FileInputStream("D:\\test.txt"));
			//反序列化,强转类型
			//读取文件内容转为对象  Object--->Student
			Student stu1=(Student)ois.readObject();
			//输出生成后对象信息
			System.out.println("姓名为:"+stu1.getName());
			System.out.println("年龄为:"+stu1.getAge());
			System.out.println("性别为:"+stu1.getGender());
			System.out.println("密码为:"+stu1.getPassword());
		} catch (Exception e) {
			e.printStackTrace();
		}finally {
			try {
				//关闭对象输出流
			if (oos!=null) {
				oos.close();
			} 
			if (ois!=null) {
				ois.close();
			}
			}catch (Exception e) {
				e.printStackTrace();
			}	
		}
	}
}
相关标签: 学习记录