为什么要序列化,如何序列化和反序列化?

2023-05-16

当两个进程在进行远程通信时,彼此可以发送各种类型的数据。无论是何种类型的数据,都会以二进制序列的形式在网络上传送。发送方需要把这个对象转换为字节序列,才能在网络上传送;接收方则需要把字节序列再恢复为对象。
把对象转换为字节序列的过程称为对象的序列化。
把字节序列恢复为对象的过程称为对象的反序列化。

说的再直接点,序列化的目的就是为了跨进程传递格式化数据

 一个原因是将对象的状态保持在存储媒体中,以便可以在以后重新创建精确的副本。
  我们经常需要将对象的字段值保存到磁盘中,并在以后检索此数据。尽管不使用序列化也能完成这项工作,但这种方法通常很繁琐而且容易出错,并且在需要跟踪对象的层次结构时,会变得越来越复杂。可以想象一下编写包含大量对象的大型业务应用程序的情形,程序员不得不为每一个对象编写代码,以便将字段和属性保存至磁盘以及从磁盘还原这些字段和属性。序列化提供了轻松实现这个目标的快捷方法。

 b.另一个原因是通过值将对象从一个应用程序域发送到另一个应用程序域中。  
例如,序列化可用于在 ASP.NET 中保存会话状态并将对象复制到 Windows 窗体的剪贴板中。远程处理还可以使用序列化通过值将对象从一个应用程序域传递到另一个应用程序域中。
 公共语言运行时 (CLR) 管理对象在内存中的分布,.NET 框架则通过使用反射提供自动的序列化机制。对象序列化后,类的名称、程序集以及类实例的所有数据成员均被写入存储媒体中。对象通常用成员变量来存储对其他实例的引用。类序列化后,序列化引擎将跟踪所有已序列化的引用对象,以确保同一对象不被序列化多次。.NET 框架所提供的序列化体系结构可以自动正确处理对象图表和循环引用。对对象图表的唯一要求是,由正在进行序列化的对象所引用的所有对象都必须标记为 Serializable(请参阅基本序列化)。否则,当序列化程序试图序列化未标记的对象时将会出现异常。
当反序列化已序列化的类时,将重新创建该类,并自动还原所有数据成员的值。

主要用于存储对象状态为另一种通用格式,比如存储为二进制、xml、json等等,把对象转换成这种格式就叫序列化,而反序列化通常是从这种格式转换回来。

使用序列化主要是因为跨平台和对象存储的需求,因为网络上只允许字符串或者二进制格式,而文件需要使用二进制流格式,如果想把一个内存中的对象存储下来就必须使用序列化转换为xml(字符串)、json(字符串)或二进制(流)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么要序列化,如何序列化和反序列化? 的相关文章

随机推荐

  • git工作中常用的命令

    注意 修改了这些config后 xff0c 需要exit后才能生效 git config global core editor 34 vim 34 git config global alias co checkout git config
  • 神一般的C语言指针,你看懂多少?

    神一般的C语言指针 xff0c 你看懂多少 xff1f 今天阅读 C C 43 43 程序员面试指南 中指针一块 xff0c 以前一知半解的指针问题顷刻间懂了 下面 xff0c 可以做个测试 xff0c 如果下面的指针问题你能够全都解答正确
  • c语言 推箱子游戏实现

    include lt iostream gt include lt stdlib h gt include lt conio h gt using namespace std int arr 9 11 61 0 1 1 1 1 1 1 1
  • 什么是敏捷开发和瀑布式开发?

    瀑布开发模式 xff1a 瀑布开发模式有以下显著的特点 xff1a 1 严格把软件项目的开发分隔成各个开发阶段 xff1a 需求分析 xff0c 要件定义 xff0c 基本设计 xff0c 详细设计 xff0c 编码 xff0c 单体测试
  • c++ STL

    https www cnblogs com zhangjxblog p 8902010 html C 43 43 STL 几个容器的底层实现 https blog csdn net single wolf wolf article deta
  • 将x中从第p位开始的n个(二进制)位设置为y中最右边n位的值,x的其余各位保持不变

    https blog csdn net roma823 article details 6388591
  • 常用数据结构:树的几种遍历方式整理

    https blog csdn net noob cliam article details 82800353 一 定义 xff1a 1 xff0c 树型结构是一类重要的非线性数据结构 xff0c 其中以树和二叉树最为常用 xff0c 直观
  • C++知识点小结(趁热搬砖三年半的小码农) 2020年06月30日整理

    C 43 43 基础知识面试必备 复习细节 1 c 43 43 变量与基本类型 解决面试时常问的考点以及易忘点易混点 一些经验准则 xff1a 如果明确数值不为负 xff0c 则选择无符号类型使用int执行整数运算 如果超出int数值范围则
  • 经典书籍--好书很多,重要的是有个目标,有个规划

    学了才是自己的 xff0c 分享出来 xff0c 和大家一起学习 好多书我也没有看过 好书很多 xff0c 重要的是有个目标 xff0c 有个规划 操作系统方面 操作系统概念 第七版 Operating System Concepts 鸟哥
  • 使用入口函数创建多个线程

    include lt iostream gt include lt thread gt using namespace std void func int a int b cout lt lt a 43 b lt lt this threa
  • 多线程编程lock_guard 和unique_lock (第六讲)

    平时看代码时 xff0c 也会使用到std lock guard xff0c 但是std unique lock 用的比较少 在看并发编程 xff0c 这里总结一下 方便后续使用 std unique lock也可以提供自动加锁 解锁功能
  • 程序员一般都浏览这些网站,不仅仅提升编程水平!

    来源 https www zhihu com question 283272958 程序员作为一个经常和互联网打交道的人群 xff0c 他们喜欢浏览那些网站呢 xff1f 不爱敲代码的程序猿整理了以下网站供大家参考 xff0c 排名不分先后
  • 电脑编程的基础知识——编译器和连接器

    核心提示 xff1a 我从没见过 xff08 不过应该有 xff09 任何一本C 43 43 教材有讲过何谓编译器 xff08 Compiler xff09 及连接器 xff08 Linker xff09 xff08 倒是在很老的C教材中见
  • 难得的c语言经典面试题

    变量的生存期 栈和堆的区别 变量的初始化问题 传指针和传值的实质 传指针的实质是传值 传值的时候 我们是做了一个复制品 在函数中只是对复制品在操作 进入函数和返回函数都是这个道理 经历了一个复制的过程 举个例子 csdn上的一个例子 这个程
  • V2X入门知识

    根据国家统计局的数据统计 xff0c 2018年全国一共发生了24万起交通事故 xff0c 其中死亡人数有6万多人 xff0c 每天将近200人 xff0c 很多公司都在尝试通过自动驾驶 xff0c 来遏制交通事故 xff0c 避免伤亡 x
  • 车联网V2X技术要点

    初探车联网V2X技术 xff08 这个链接的内容非常不错 xff09 https www jianshu com p ecc198efdd38 随着信息技术的发展 xff0c 车联网正在从概念变为现实 xff0c 深入研究车与车 xff08
  • 智能网联V2X的秘密?解读DSRC和C-V2X两种技术

    近年来智能交通系统的开发将主要集中在智能公路交通系统领域 xff0c 也就是俗称的车联网 其中 V2X 技术借助车 车 xff0c 车与路测基础设施 车与路人之间的无线通信 xff0c 实时感知车辆周边状况进行及时预警成为当前世界各国解决道
  • NR V2X新总结

    https mp weixin qq com s a7t9fwiJOc2LCCQsqeIvUw 图片不显示 xff0c 可以看链接 自从2018年6月RAN 80全会上启动了NR V2X技术研究后 xff0c 3GPP工作组针对NR V2X
  • ADAS是什么?

    先进驾驶辅助系统 xff08 Advanced Driver Assistant System xff09 xff0c 简称ADAS xff0c 是利用安装于车上的各式各样的传感器 xff0c 在第一时间收集车内外的环境数据 xff0c 进
  • 为什么要序列化,如何序列化和反序列化?

    当两个进程在进行远程通信时 xff0c 彼此可以发送各种类型的数据 无论是何种类型的数据 xff0c 都会以二进制序列的形式在网络上传送 发送方需要把这个对象转换为字节序列 xff0c 才能在网络上传送 xff1b 接收方则需要把字节序列再