序列化

是谁,从哪里来,到哪里去

是什么,为什么产生,干什么用的

是什么?

  • 什么是序列化呢?
    • 本质:
      • 序列化的本质:
        把内存中的对象,转化成 字节序列 最贴近我们的django序列化.
      • 反序列化的本质:
        把字节序列, 转化成 内存中的对象
    • 本质:
      上讲,序列化就是把实体对象状态按照一定的格式写入到有序字节流,反序列化就是从有序字节流重建对象,恢复对象状态。序列化机制的核心作用就是对象状态的 保存与重建。 这句话更接近底层,但是对我不太友好 https://www.jianshu.com/p/edcf7bd2c085
  1. 定义:

    1. 序列化 (Serialization)是将对象的状态信息转换为可以存储或传输的形式的过程。 百度百科
    2. 序列化是将对象状态转换为可保持或可传输的形式的过程。MSDN的定义
      序列化的补集是反序列化,后者将流转换为对象。这两个过程一起保证数据易于存储和传输。
    • 持久化, 保持, 储存 都是一个意思: 存储到磁盘上面. 写入磁盘
    • MSDN(Microsoft Developer Network)是早期微软在推广Win32 程序设计以及开发工具时,专门为开发人员所提供的一个服务
    1. 序列化是一种处理对象流的机制——把内存中的Java对象转换成二进制流。
      对象流化后,将对象内容保存在磁盘文件中或作为数据流进行网络传输。简单来说,序列化是将对象的状态信息转换为可以存储或传输的形式的过程。
  2. 目的:编辑 百度百科 定义其实就包含了目的

    1. 以某种存储形式使自定义对象持久化;
    2. 将对象从一个地方传递到另一个地方。
    3. 使程序更具维护性。
  3. 各种理解:

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

    2. 说白了就是为了保证数据传输的安全性,以免发生意外时数据丢失。
      序列化说白了就是将数据转成字节型数组然后传输。

    • 网络上传输的数据, 他们的格式都是 二进制序列/字节型数组(一个东西).
    1. 所以,序列化是把内存中某一时刻数据状态,转换成不依赖硬件,不依赖不同JVM,不依赖编程语言的,以便在稍后复原的另一种数据状态;
      这种状态可以在网络间传输,可以存储到不同硬件磁盘,可以在不同的编程语言环境复原!

    2. https://blog.csdn.net/qq_38419433/article/details/79740643 这一篇讲的根深一些
      简单来说序列化就是一种用来处理对象流的机制。所谓对象流也就是将对象的
      内容进行流化,流的概念这里不用多说(就是I/O)。我们可以对流化后的对象进行读写
      操作,也可将流化后的对象传输于网络之间(注:要想将对象传输于网络必须进行流化)!
      在对对象流进行读写操作时会引发一些问题,而序列化机制正是用来解决这些问题的!
      后面的问题,我目前无法理解,就没有拷贝.

    3. https://blog.csdn.net/so_geili/article/details/99836043 这一篇提到了 流的概念
      我接触到的无知的范围真是越来越大.

为什么?

  • 上文中的 4.4

干什么

  • 在是什么里面

引申概念

  1. 程序中常用的 cin 和 cout,分别用于从键盘输入数据和向屏幕输出数据(简称为标准 I/O)。除此之外,程序还可以从文件中读入数据,以及向文件中写入数据(简称为文件 I/O)。

数据输入和输出的过程也是数据传输的过程。数据像水一样从一个地方流动到另一个地方,因此,在 C++ 中将此过程称为 “流(stream)”。

    1. https://blog.csdn.net/qq_42721694/article/details/82085697 对象流的简介.
      对象流:有的时候,我们可能需要将内存中的对象持久化到硬盘上,或者将硬盘中的对象信息读到内存中,这个时候我们需要使用对象输入输出流。
      序列化: 是对象转换成一个字节序列的过程,是一个写操作
      反序列化: 一个字节序列转换成对象的过程 ,是一个读操作

    2. 对象流:
      使用对象流之前,很明显需要一个自定义的对象
      可是普通的自定义类创建的对象并不能被对象流序列化
      我们要让这个自定义类实现一个Serializable接口(Serializable是一个标志性接口,接口中无任何内容)

    1. 计算机中的流:
      通常来说计算机所说的流是指stream,往往是对一种有序连续具有方向性的数据(其单位可以是bit,byte,packet)的抽象描述。

    2. 计算机网络中的流:
      这里的流是说flow,
      更多的是指从一端到另一端的一次网络数据传输过程。其包含连接的建立,数据的传输。一条流往往指的是一次完成的数据传输,其包含了该过程中所有的数据包。但是一个连接可以有多个流,即在连接建立之后,可以有多次的数据传输。mark:计算机网络中的流,更多的强调是一次数据传输过程。重在过程及这个过程中的数据。

    3. TCP流:
      通常所说的TCP流是指TCP的字节流传输,其传输的数据是连续有序的字节,所以说TCP是一个流式协议,指的是其数据传输是流式的。更多的,TCP流也可以指TCP一次数据传输的过程,包含了一次完整的数据传输。
      ————————————————
      版权声明:本文为CSDN博主「lengye7」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
      原文链接:https://blog.csdn.net/lengye7/article/details/78509551

  1. 数据流(data stream)是一组有序,有起点和终点的字节的数据序列。包括输入流和输出流。
    对象流是不是数据流的一种?