序列化Serialize

序列化:将数据结构(Java中指JavaBean)或对象转化为二进制串(在Java中指byte[])的过程—>持久化(序列化的特殊形式)

反序列化:将在序列化进出中产生的二进制串转换为数据结构或对象的过程

一个对象想要序列化,这个对象必须实现一个Serializable接口,这个接口没有任何方法和属性,仅仅用来标识这个类产生的对象可以序列化

被static修饰的属性的值不会被序列化,因为不属于对象,反之反序列化时会返回默认值

Transient修饰的属性不能被序列化—>transient关键字就是用来保护某些属性的值不被序列化(比如用户的隐私信息),换句话说,这个字段的生命周期只存在调用者的内存中而不会在网络中传输或写到硬盘持久化

如果我们要在不同编程语言中传递对象,就必须把对象序列化为标准格式,比如XML,但更好的方法是序列话为JSON,因为JSON表示出来就是一个字符串,可以被所有语言读取,也可以方便的存储到磁盘或者网络传输。JOSN不只是标准格式,并且比XML更快,而且可以直接在web页面中读取,非常方便。

 

JSON的如下优点,使他成为最广泛使用的序列化协议

  1. 这种Associative array格式非常符合工程师对对象的理解

  2. 保持了XML的Human-Readable的优点

  3. 相对于XML而言,序列化后的文件更加简洁,有研究表名XML所产生序列化后的文件大小接近JSON的两倍

  4. 具备JavaScript的先天性支持,所以被广泛运用于Web Browser的应用场景中

  5. 于XML相比,其协议比较简单,解析速度比较快

  6. 松散的Associative array使其具有良好的兼容性和可扩展性

 

如果持久层在Hadoop子项目中,Avro是更好的选择,Avro的设计理念更偏向于动态类型语言

对于持久层非Hadoop项目,以静态类型语言为主的应用场景,Protobuf适合开发习惯

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值