关于序列化的一点思考

最近对序列化进行了一下深入的思考,以前一直没怎么在意这个点,发现还是有一些收获,写篇简单的笔记记录一下。

建议先看这篇文章

1、什么是序列化

在程序中怎么获取对象某个字段的值:

对象在JVM中的存储布局可以分为对象头,实例数据,字节对齐三部分,我们知道Java万物皆引用,所以可以通过这个引用去jvm里找到对象的实际位置,然后再计算出字段偏移量,根据字段的大小,读取对应大小的字节,就可以取到字段值了,详细见Java对象内存布局

那么如果要将这一对象持久化到磁盘或者通过网络传输,就需要把jvm中这部分数据转化成一个可传输的字节流,还有另外一个要求,转化后的结果当然还得转化回来,那就需要建立一个协议,比如保存对象的元数据,这一过程就是序列化与反序列化。

2、序列化的最终结果都是二进制比特流吗

不是,比如xml,json等序列化的结果就是普通文本,但是比如protobuf序列化的结果直接就是二进制,这二者没有本质区别,到达物理层后都会变成比特流,然后在网络上传输。

3、我们知道Java有默认的序列化方案,那么如何理解String的getBytes方

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值