当前位置: 首页 > news >正文

Java 中序列化和反序列化的详细说明

文章目录

  • 前言
  • 1. Java 内置序列化(Java Serialization)
    • 1.1 介绍
    • 1.2 优点
    • 1.3 缺点
    • 1.4 实现代码
  • 2. JSON 序列化(使用 Jackson 库)
    • 2.1 介绍
    • 2.2 优点
    • 2.3 缺点
    • 2.4 实现代码
  • 3. XML 序列化(使用 JAXB 库)
    • 3.1 介绍
    • 3.2 优点
    • 3.3 缺点
    • 3.4 实现代码
  • 4. Protobuf 序列化(使用 Protocol Buffers)
    • 4.1 介绍
    • 4.2 优点
    • 4.3 缺点
    • 4.4 实现代码
  • 总结


前言

在 Java 中,序列化(Serialization)是将对象转换为字节流的过程,以便将其存储到文件、数据库或通过网络传输。反序列化(Deserialization)则是将字节流转换回对象的过程。Java 提供了多种序列化和反序列化的方式,每种方式都有其优缺点。本文将详细介绍这些方式,并提供具体的实现代码。


1. Java 内置序列化(Java Serialization)

1.1 介绍

Java 内置序列化是通过实现 Serializable 接口来实现的。它是最简单和最常用的序列化方式,但也有一些缺点,比如性能较低和安全性问题。

1.2 优点

  • 简单易用:只需实现 Serializable 接口即可。
  • 内置支持:Java 标准库直接支持。

1.3 缺点

  • 性能较低:序列化和反序列化速度较慢。
  • 安全性问题:可能导致反序列化漏洞。
  • 版本兼容性:类结构变化可能导致反序列化失败。

1.4 实现代码

import java.io.*;// 实现 Serializable 接口
class Person implements Serializable {private static final long serialVersionUID = 1L; // 用于版本控制private String name;private int age;public Person(String name, int age) {this.name = name;this.age = age;}@Overridepublic String toString() {return "Person{name='" + name + "', age=" + age + "}";}
}public class JavaSerializationExample {public static void main(String[] args) {Person person = new Person("Alice", 30);// 序列化try (ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("person.ser"))) {oos.writeObject(person);System.out.println("Serialization complete."); // 输出序列化完成信息} catch (IOException e) {e.printStackTrace();}// 反序列化try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream("person.ser"))) {Person deserializedPerson = (Person) ois.readObject();System.out.println("Deserialized Person: " + deserializedPerson); // 输出反序列化后的对象} catch (IOException | ClassNotFoundException e) {e.printStackTrace();}}
}

输出结果

Serialization complete.
Deserialized Person: Person{name=

相关文章:

  • Java Spring Boot 控制器中处理用户数据详解
  • 零成本打造专属AI图像处理平台:IOPaint本地部署与远程访问指南
  • JetBrains Toolbox 闪退
  • OpenCV进阶操作:人脸检测、微笑检测
  • LangChain的预定义的角色
  • OpenCV + PyAutoGUI + Tkinter + FastAPI + Requests 实现的远程控制软件设计方案
  • 边缘计算网关工业物联网应用:空压机远程运维监控管理
  • 搜索二维矩阵 II
  • QMK RGB矩阵灯效配置详解:从理论到实践(实操部分)
  • 第七节第二部分:接口的综合案例
  • Selenium-Java版(环境安装)
  • 【LINUX操作系统】线程同步与互斥
  • Selenium-Java版(操作元素)
  • 毕业论文,如何区分研究内容和研究方法?
  • 级联与端到端对话系统架构解析:以Moshi为例
  • 二叉树前中后序遍历统一迭代法详解:空标记法与栈操作的艺术
  • LIO-SAM框架理解
  • 鸿蒙OSUniApp 实现精美的用户登录和注册页面#三方框架 #Uniapp
  • html5+css3实现傅里叶变换的动态展示效果(仅供参考)
  • Pytorch的Dataloader使用详解
  • 公司网站制作费计入会计什么科目/北京百度快速优化排名
  • 网站建设网站推广/百度云登录入口官网
  • 专业做刀具网站的公司/百度seo刷排名软件
  • 新增网站备案时间/成都seo整站
  • 网站内做关键词连接/深圳网站设计制作
  • 免费电子商务网站源码/常德政府网站市民留言