• chapter6.4 序列化和反序列化


    序列化和反序列化

    序列化保存到文件就是持久化,按照某种规则保存数据到文件,文件是个字节序列,把数据转换成字节序列,输出到文件或者发到网络,就是序列化,反之,从文件到内存,就是反序列化。

    serializatoion

    pickle库,python使用的序列化方式,效率较低,只有python使用。

    dumps 对象序列化为bytes对象

    dump 对象序列化到文件,就是存入文件

    load bytes对象反序列化到内存

    loads d对象反序列化,从文件读取数据

    序列化就是按照一定格式,保存数据,反序列化就是找到可以恢复的对象

    序列化对于每个对象都有其属性,每个对象不同,就需要序列化

    序列化与反序列化要用同一套类的定义,否则会抛异常,类要用同一套,否则会发生不可预料的结果。

    可以理解为:反序列化时,类是模子,二进制序列是铁水。

    序列化应用大多用在网络传输中。本地序列化后通过网络传输到远程节点中,远程服务器上的服务接收后,反序列化就可以使用了。

    要注意远程段接受后,反序列化要有对应的数据类型,否则报错,尤其自定义类型,必须要有一致的定义。

    不同的协议,效率不同,学习曲线不同,适用不同场景,要根据不同的情况分析选型。

    protocol Buffer :Google的协议,学习曲线陡峭。

    XML:以前使用的网络传输协议标准,现在可以替代ini配置文件,或者使用Json

    Json :JavaScript Object Notation

    轻量级的数据交换格式,基于ECMAScript(w3c组织制定的Js规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据

    Json的数据类型

    值,双引号引起的字符串,数值,true,false,null,对象,数组,都是值

    字符串,由双引号包围的任意字符的组合,可以有转义字符

    数值,有正负,整数,浮点数

    对象 object:就是py的字典,

    数组array:py的列表

    可以到官网看图理解,官网的图是铁路图。

    json模块

    python支持少量内建数据类型的Json类型的转换。

    常用方法:dump;dumps;load;loads

    一般json编码很少落地,数据都是通过网络传输,传输时要考率压缩

    压缩,压缩字节,去除空格等,很少落地,网络传输

    本质是文本,是一串字符串

    json很简单,几乎所有编程语言都支持json,所以应用范围广泛。

    MessagePack 

    是一个基于二进制的对象序列化类库,可以跨语言通信,可以在很多语言之间交换数据

    比json更快速轻巧,支持语言众多,支持json和pickle

    简单易用,高效压缩,支持语言丰富

    安装

    pip install msgpack-python

    常用方法

    packb序列化对象,提供了dumps来兼容json和pickle

    unpack 反序列化对象,使用loads

    pack 序列化对象保存到文件对象,使用dump

     unpack 反序列化对象到保存的文件,使用load

    import json
    d={'name':'Tom','age':23,'interest':['music',"movie"]}
    j = json.dumps(d)
    print(j,type(j))
    print(len(j.replace(" ","")))
    
    import msgpack
    m = msgpack.dumps(d)
    print(m,type(m))
    print(len(m))

    和json比较,json为52,msgpack为37

    是序列化的很好的选择

    官网https://msgpack.org

  • 相关阅读:
    函数及习题
    数组和集合
    数组和集合实例
    普通集合和泛型集合的区别,哈希表和字典表的区别,队列和堆栈的区别以及堆和栈的区别。
    c#时间表示
    c#正则表达式
    js正则实例
    习题实例
    c#数据类型
    简单控件
  • 原文地址:https://www.cnblogs.com/rprp789/p/9593185.html
Copyright © 2020-2023  润新知