首页 > 编程语言 >JAVA 序列化和反序列化

JAVA 序列化和反序列化

时间:2024-09-19 19:23:32浏览次数:11  
标签:JAVA String 对象 Person new 序列化 public

序列化:把对象转换为字节序列的过程称为对象的序列化

反序列化:把字节序列转换为对象的过程称为对象的反序列化

对象序列化的作用

1)把对象的字节序列永久地保存到硬盘上,通常存放在一个文件中

2)在网络上传送对象的字节序列

ObjectOutputStream代表对象输出流,它的writeObject(Object obj)方法可对参数指定的obj对象进行序列化,把得到的字节序列写到一个目标输出流中。

ObjectInputStream代表对象输入流,它的readObject()方法从一个源输入流中读取字节序列,再把它们反序列化为一个对象,并将其返回。

对象序列化的步骤:

1) 创建一个对象输出流,它可以包装一个其他类型的目标输出流,如文件输出流;

2) 通过对象输出流的writeObject()方法写对象。

对象反序列化的步骤:

1) 创建一个对象输入流,它可以包装一个其他类型的源输入流,如文件输入流;

2) 通过对象输入流的readObject()方法读取对象。

序列化的代码

1.实体类

import java.io.Serializable;
  
public class Person implements Serializable {
  
    private static final long serialVersionUID = 4603642343377807741L;
    private int age;
    private String name;
    private String sex;
  
    public int getAge() {
        return age;
    }
  
    public void setAge(int age) {
        this.age = age;
    }
  
    public String getName() {
        return name;
    }
  
    public void setName(String name) {
        this.name = name;
    }
  
    public String getSex() {
        return sex;
    }
  
    public void setSex(String sex) {
        this.sex = sex;
    }
}

2.序列化和反序列化的方法

import java.io.*;
import java.text.MessageFormat;
  
public class TestObjSerializeAndDeserialize {
  
    public static void main(String[] args) throws Exception {
        SerializePerson();//序列化Person对象
        Person p = DeserializePerson();//反序列Perons对象
        System.out.println(MessageFormat.format("name={0},age={1},sex={2}",
                p.getName(), p.getAge(), p.getSex()));
    }
  
  
    private static void SerializePerson() throws FileNotFoundException, IOException {
        Person person = new Person();
        person.setName("gacl");
        person.setAge(25);
        person.setSex("男");
        // ObjectOutputStream 对象输出流,将Person对象存储到E盘的Person.txt文件中,完成对Person对象的序列化操作
        ObjectOutputStream oo = new ObjectOutputStream(new FileOutputStream(new File("E:/Person.txt")));
        oo.writeObject(person);
        System.out.println("Person对象序列化成功!");
        oo.close();
    }
  
    private static Person DeserializePerson() throws Exception, IOException {
        ObjectInputStream ois = new ObjectInputStream(new FileInputStream(new File("E:/Person.txt")));
        Person person = (Person) ois.readObject();
        System.out.println("Person对象反序列化成功!");
        return person;
    }
  
}

代码运行结果:

序列化Person成功后在E盘生成了一个Person.txt文件,而反序列化Person是读取E盘的Person.txt后生成了一个Person对象

标签:JAVA,String,对象,Person,new,序列化,public
From: https://blog.csdn.net/nonagontech/article/details/142367904

相关文章

  • java pom两个模块需要互相引用怎么办
    在Maven项目中,如果两个模块需要互相引用,通常的做法是将它们放在同一个父项目下,并使用父项目的聚合功能来管理这些模块。这样做可以确保模块之间的依赖关系能够正确解析。项目结构假设你有两个模块module-a和module-b,它们需要互相引用。你可以创建一个父项目parent-project,并......
  • java识别是不是ajax请求
    在JavaWeb应用中,识别是否是一个AJAX请求通常可以通过检查HTTP请求头中的X-Requested-With头字段来实现。如果该字段的值为XMLHttpRequest,则可以认为这是一个AJAX请求。示例代码以下是一个示例,展示了如何在SpringMVC控制器中识别AJAX请求:1.SpringMVC控制器importorg.spring......
  • java-----方法引用
    方法引用:把已有的方法拿过来用,当做函数式接口中抽象方法的方法体方法引用符是::注意:    1.引用处必须是函数式接口    2.被引用的方法已经存在    3.被引用方法的形参和返回值需要跟抽象方法保持一致    4.被引用方法的功能要满足当前需......
  • JavaScript在数据可视化领域的探索与实践
    目录引言JavaScript可视化库概览D3.js基础入门1.引入D3.js2.绘制简单的条形图3.添加轴交互性与动画实际应用场景结论引言在数据驱动决策日益重要的今天,数据可视化成为连接数据与洞察的桥梁。JavaScript,作为前端开发的主力军,凭借其灵活性和丰富的库支持,在数据......
  • java计算机毕业设计少儿英语在线学习平台APP(开题+程序+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着全球化进程的加速和互联网技术的飞速发展,英语作为国际交流的重要工具,其教育需求在少儿群体中日益凸显。传统线下英语教育模式受限于时间、地点及......
  • JavaSE——多线程基础
    概述        现代操作系统(Windows,macOS,Linux)都可以执行多任务。多任务就是同时允许多个任务。例如:播放音乐的同时,浏览器可以进行文件下载,同时可以进行QQ消息的收发。    CPU执行代码都是一条一条顺序执行的,但是,即使是单核CPU,也可以同时运行多个任务。因为操......
  • Java·Swing窗口登录源码
    文章目录概要整体架构流程技术名词解释技术细节小结概要Java Swing是Java基础类库的一部分,主要用于开发图形用户界面(GUI)程序整体架构流程1.准备好mysql数据库也可以使用云端数据库2.一个灵活的脑子3.IDEA技术名词解释一、javax.swing.JOption......
  • Java中异常类处理机制的学习
    异常处理机制目录异常处理机制抛出异常捕获异常异常传播抛出异常当一个方法出现错误引发异常时,方法创建异常对象并交付运行时系统,异常对象中包含了异常类型和异常出现时的程序状态等异常信息。运行时系统负责寻找处置异常的代码并执行。throw与throws的用法throws:通常被用在......
  • JAVA进阶-枚举,类加载器,反射
    day15-枚举,类加载器,反射枚举为什么有枚举为了简洁的表示一些固定的值,Java就给我们提供了枚举。定义格式是指将变量的值一一列出来,变量的值只限于列举出来的值的范围内。格式publicenums{ 枚举项1,枚举项2,枚枚举项3;}定义枚举类要用关键字enum定义......
  • 全网最细Java学习路线!!!!!,技术笔记及教程持续更新
    全部配套资源博主正在持续更新,一键三连感谢支持部分笔记已经更新到博客里面【Java学习路线图】Java最高效学习路线图(依次向下顺序学习即可)==》Java基础==》Javaweb(含SSM框架)==》AI+若依框架==》微服务全套==》23年Java大厂面试==》MySQL==》JVM==》数据......