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

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=
http://www.xdnf.cn/news/6132.html

相关文章:

  • Android学习总结之类LiveData与ViewModel关系篇
  • 【Redis 进阶】分布式锁
  • Q1财报揭示:用户增长与客单价下跌对eBay卖家的蝴蝶效应
  • 最佳实践PPT | 数据架构设计总体规划方案数据中台架构数据架构图解决方案
  • 深度解析智能体:从概念到应用的全方位洞察
  • AI产品上市前的“安全通行证“
  • 7.DTH11和PWM波
  • React系列——nvm、node、npm、yarn(MAC)
  • 机器学习第十讲:异常值检测 → 发现身高填3米的不合理数据
  • Spring 事件监听机制的使用
  • flatbuffer实践
  • 操作系统实验 实验3 存储器分配与回收
  • 设计模式-中介者模式
  • Docker使用经验-从Image导出dockerfile并进行修改
  • 【Elasticsearch】DSL 篇
  • 什么是alpaca 或 sharegpt 格式的数据集?
  • Windows电脑端高效记事提醒工具推荐
  • 【ios越狱包安装失败?uniapp导出ipa文件如何安装到苹果手机】苹果IOS直接安装IPA文件
  • SCDN能够运用在物联网加速当中吗?
  • Spring Web MVC————入门(2)
  • Spark处理过程--案例数据清洗
  • 大模型越狱:技术漏洞与安全挑战——从原理到防御
  • 正向代理与反向代理区别及应用
  • 威廉・巴拉德与格理集团:在高科技浪潮中的洞察与前行
  • 【极兔快递Java社招】一面复盘|数据库+线程池+AQS+中间件面面俱到
  • 【Linux网络】————详解TCP三次握手四次挥手
  • vue3:十三、分类管理-表格--slot插槽详细说明---表格内拼接字段、tag标签
  • 怎么查看当前vue项目,要求的node.js版本
  • Oracle — PL-SQL
  • JT/T 808 各版本协议字段级别对比与解析适配建议