前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Zipack初体验:我的开源标准!

Zipack初体验:我的开源标准!

作者头像
Jean
发布2020-07-01 16:13:29
5200
发布2020-07-01 16:13:29
举报
文章被收录于专栏:Web行业观察Web行业观察

私货时间到~

JSON vs Zipack

当今最流行的序列化格式无疑是JSON,但是基于文本的JSON有许多缺点,比如解析速度慢,体积较大。根本原因在于,JSON是基于文本的,只要是文本就离不开编译,只要编译就永远没有二进制格式来的快,而只有基于前缀的二进制格式能克服这些问题。经过若干个月的打磨,我设计出了一套紧凑的、无协议的二进制序列化格式Zipack用来取代JSON,为数据的存储和传输提供更好的方案。

  • 官网:https://zipack.gitee.io/
  • Gitee仓库:https://gitee.com/zipack/
  • 文件后缀名:.zipack
  • mime类型:application/zipack

Zipack初体验

在线体验:https://zipack.gitee.io/#demo

在官网的在线demo中,我们可以输入任意的JSON串,下面会自动生成相对应的Zipack字节串(16进制),不同的是,体积大大压缩了!事实上,Zipack采用的是变长前缀编码,简单地说,更常用的类型更短,比如0~127的正整数只占一个字节,短的字符串只需额外一个字节来表示类型和长度。

拒绝Base64,随意插入纯二进制数据

想象一下,如果想要在JSON中插入一个纯二进制数据,我们得使用Base64等手段把字节串序列化成字符串再插入JSON,但用Base64编码的后果就是,体积膨胀1/3。在Zipack中就不会出现这个问题,因为Zipack有一个基本类型就是字节串!比如在JavaScript中,我们可以这样定义一个文件对象,包括文件名,mime类型以及文件内容:

代码语言:javascript
复制
zipack.serialize({
    name: 'binary-file.bin',
    mime: 'application/octet-stream',
    file: new ArrayBuffer(8)
})

这里我们使用的软件是zipack.js,这也是Zipack官方提供的JavaScript版本的编解码器,之前的在线demo也用的它。如果你觉得还可以,记得回来star,follow一下我的仓库哦,地址:https://gitee.com/zipack/zipack-javascript。

迷惑行为大赏:0.1和0.5的区别

只有一个特殊情况下压缩率是超过100%的,如果输入的是一个不能被2的幂整除的十进制小数,那它的Zipack值反而变大了,观察下面这2种情况:

当我们输入0.5,压缩率是100%,但输入0.1时压缩率变成167%,体积反而变大了,这是因为十进制的0.5用二进制表示为0.1,但是十进制的0.1用二进制表示就是0.00011001100110011001100110011001100110011......无限循环。这是因为0.5可以表示为1/2,分母的2的幂,但0.1无法这样表示,所以0.1无法用二进制精确地表示,小数点后面只能拖很长的一条尾巴,于是zipack的体积反而变大了。但是不用担心,在正常情况下我们存放在内存中的小数都是二进制的,不会出现这种问题。

Zipack的优势

  1. 体积更小:可以将JSON压缩至70%左右。
  2. 速度更快:基于前缀的二进制格式无须编译,比文本格式更快。
  3. 类型丰富:支持Number,String,Bool,Null,ByteArray,List,Map(字典)以及保留类型。
  4. 变长编码:根据Huffman编码,常用的类型更短,如小整数只占1个字节。
  5. 原创算法:在处理字符串和浮点数上,Zipack采用压缩率更高的编码来取代标准的UTF8和IEEE浮点数,具体原理请参考Zipack的格式规范。
  6. 自由扩展:Zipack提供保留前缀,开发者可借此添加新的类型。
  7. 流化传输:处理大数据的时候,Zipack可以无缝拼接,边传输边处理。

好啦,以上就是我给大家带来的Zipack初体验,但本文尚未涉及Zipack是如何实现的,下一期我将带给大家一篇详细的说明文来介绍Zipack的底层原理以及近乎完美的设计理念,当然你也可以去官方的Gitee仓库阅读Zipack规范:https://gitee.com/zipack/spec。如果可以科学上网的话,建议直接去Github仓库上阅读“原著”:

https://github.com/zipack/spec

最后别忘了star和follow,如果还能打赏,那将是对我对大的鼓励。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-06-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 WebHub 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
文件存储
文件存储(Cloud File Storage,CFS)为您提供安全可靠、可扩展的共享文件存储服务。文件存储可与腾讯云服务器、容器服务、批量计算等服务搭配使用,为多个计算节点提供容量和性能可弹性扩展的高性能共享存储。腾讯云文件存储的管理界面简单、易使用,可实现对现有应用的无缝集成;按实际用量付费,为您节约成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档