为什么要序列化

在日常项目中,我们经常都会和序列化三个字打交道。常用的各种库和语言都集成了序列化的功能。

c++  的Boost库 java ,c# 都实现了此功能,程序设计者只需要调用接口选择要序列化的数据即可序列化 反序列化,将内存中的数据转化为二进制数据存储进本地。


那么问题就来了:


对象在内存中的数据本来就是二进制的啊!我们直接拷贝对象对象在内存中的数据写入本地磁盘即可啊。那为什么我们还需要序列化框架来做这件事情?


网上关于序列化的介绍都直说 : 序列化是为了持久化内存中的对象。但并没有介绍为什么不直接拷贝内存中的对象。所以只有自己去领会其中的精髓。


这是本人的关于为什么不直接拷贝内存中的数据来实现持久化的一些见解,如有错误,欢迎指正:


首先来对比两种实现方式功能完备性:

1

 手动拷贝内存数据框架提供的序列化机制
持久化 okok
筛选某些属性不存储nook
防止重复存储nook

筛选某些属性不存储:比如一个对象里你创建了一个缓存对象用于缓存某些数据,这些缓存数据在每次功能使用的时候才生效,所以存入本地并无意义,为了节省硬盘空间,应该在序列化的时候将其去掉。


防止重复储存: 相同的对象总是不希望重复存储的 。即使有改变,也应该在原来存储的地方修改对应的值就可以了。


由此可见:

        序列化所做的工作除了将数据以二进制存入本地外,还要提供筛选数据,防止重复存储等功能,而这些功能的实现就要求用户告诉功能设计者要存储的对象有哪些希望序列化的数据,基于这种设计理念,最终形成了大多数框架所采用的:用户在接口内输入需要序列化的数据及策略 ,框架将其序列化。


总结:

 问:为什么要序列化?

  答: 为了持久化内存数据和传输内存数据


      问: 为什么要采用框架提供的序列化,直接拷贝内存数据不就行了么?

      答:直接拷贝内存数据无法达到如防止重复存储,筛选数据等功能。




  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值