序列化和反序列化

面试题:对序列化和反序列化的理解?

我们之所以需要序列化,它核心的目的是为了解决网络通信之间的对象传输的问题,也就是说,如何把当前JVM进程的一个对象,通过跨网络传输到另一个JVM进程里面,而序列化就是就是把内春里面的对象转化为字节流,以便用来实现存储和传输;而反序列化,是根据从文件或网络上获取到对象的字节流,通过解析字节流里面保存的对象信息,并且重新构建一个新的对象

1. 基本概念

序列化(Serialization)

是将数据结构或对象转换成一种可存储或可传输格式的过程。在序列化后,数据可以被写入文件、发送到网络或存储在数据库中,以便在需要时可以再次还原成原始的数据结构或对象。序列化的过程通常涉及将数据转换成字节流或类似的格式,使其能够在不同平台和编程语言之间进行传输和交换。

反序列化(Deserialization)

是序列化的逆过程,即将序列化后的数据重新还原成原始的数据结构或对象。反序列化是从文件、网络数据或数据库中读取序列化的数据,并将其转换回原始形式,以便在程序中进行使用和操作。

2. 序列化格式

常见的序列化格式包括 JSON、XML、Protocol Buffers、MessagePack等。每种格式有其优势和适用场景,选择合适的序列化格式取决于具体的应用需求。

在数据传输(也可称为网络传输)前,先通过序列化工具类将Java对象序列化为json/xml文件。

在数据传输(也可称为网络传输)后,再将json/xml文件反序列化为对应语言的对象

3. 注意项

(一)

只有实现了Serializable或者Externalizable接口的类的对象才能被序列化为字节序列。(不是则会抛出异常)

(二)

java.io.ObjectInputStream:对象输入流
该类的readObject()方法从输入流中读取字节序列,然后将字节序列反序列化为一个对象并返回。
java.io.ObjectOutputStream:对象输出流
该类的writeObject(Object obj)方法将将传入的obj对象进行序列化,把得到的字节序列写入到目标输出流中进行输出。

(三)

声明为static和transient类型的成员数据不能被序列化。因为static代表类的状态,transient代表对象的临时数据

相关推荐

  1. Unity-序列序列

    2024-07-14 18:46:01       59 阅读
  2. 序列序列

    2024-07-14 18:46:01       31 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-14 18:46:01       67 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-14 18:46:01       72 阅读
  3. 在Django里面运行非项目文件

    2024-07-14 18:46:01       58 阅读
  4. Python语言-面向对象

    2024-07-14 18:46:01       69 阅读

热门阅读

  1. flask基础配置详情

    2024-07-14 18:46:01       16 阅读
  2. 昇思25天学习打卡营第24天|RNN实现情感分类

    2024-07-14 18:46:01       20 阅读
  3. Windows图形界面(GUI)-DLG-C/C++ - 对话框的创建实现

    2024-07-14 18:46:01       19 阅读
  4. 资源分享:红豆地球V1.247 - 免费版

    2024-07-14 18:46:01       19 阅读
  5. 部署运维之一:发展历史

    2024-07-14 18:46:01       22 阅读
  6. 力扣 hot100 -- 多维动态规划

    2024-07-14 18:46:01       19 阅读
  7. SQLite3封装类教程

    2024-07-14 18:46:01       20 阅读
  8. 代码随想录算法训练营第38天

    2024-07-14 18:46:01       30 阅读