序列化与反序列化 字符流和字节流:通过网络传输结构化的数据

一、前言

在TCP的连接上,它传输数据的基本形式就是二进制流,也就是一段一段的1和0。在一般编程语言或者网络框架提供的API中,传输数据的基本形式是字节,也就是Byte。一个字节就是8个二进制位,8个Bit,所以在这里,二进制流和字节流本质上是一样的。对于我们编写的程序来说,它需要通过网络传输的数据是结构化的数据,比如,一条命令、一段文本或者一条消息。对应代码中,这些结构化的数据都可以用一个类或者一个结构体来表示。

要想使用网络框架的API来传输结构化的数据,必须得先实现结构化的数据与字节流之间的双向转换。这种将结构化数据转换成字节流的过程,称为序列化,反过来转换,就是反序列化。序列化的用途除了用于在网络上传输数据以外,另外一个重要用途是,将结构化数据保存在文件中,因为文件内保存数据的形式也是二进制序列。

二、选择哪种序列化实现

Java和Go语言都内置了序列化实现,也有一些流行的开源序列化实现,比如,Googel的Protobuf、Kryo、Hessian等;此外,像JSON、XML这些标准的数据格式,也可以作为一种序列化实现来使用。当然,也可以自己来实现私有的序列化实现。
面对这么多种序列化实现,需要权衡几个因素:

序列化后的数据最好是易于人类阅读的
实现的复杂度是否足够低
序列化和反序列化的速度越快越好
序列化后的信息密度越大越好,也就是说,同样的一个结构化数据,序列化之后占用的存储空间越小越好
不存在一种序列化实现在这几个方面都是最优的,像JSON、XML可读性最好,但信息密度也最低。像Kryo、Hessi

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值