把文本和二进制数据混合存储的方案

♥使用文本,便于人类阅读;使用二进制,便于机器处理。
如何把文本和二进制数据混合存储在一个文件里呢?
总的来说,有两套方案。一是默认文本,扩展二进制;二是默认二进制,扩展文本。
♥先说一。选择UTF8为默认的编码格式,从UTF8扩展出UTF8++,后者占用了UTF8还没有使用的8个码位。
0xxxxxxx
110xxxxx 10xxxxxx
1110xxxx 10xxxxxx 10xxxxxx
11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
11111yyy共8个码位,yyy=0…7,记为e0…e7,如e0=11111.000等。
e0表示后跟1字节表示的长度,再跟对应长度的二进制数据。例:
[e0][20][20字节的二进制数据]
e1后跟2字节长度,和数据。
e2+4字节+数据
e3+8字节+数据
例:
[e1][60000][数据]
♥再说二,默认二进制,扩展文本。
每个文件都是从二进制数据开始的,有4字节的长度数据,后跟对应长度的数据块。长度分正负,正数为二进制数据块的长度,负数的绝对值表示文本数据块的长度。例:
[+200][200字节二进制数据]
[-50][50字节文本数据]
每个段的长度限制在2GB,这是个比较宽松的限制。
总结,方案一默认使用UTF8编码,恐怕有人不满,主要问题集中在UTF8用3字节表示一个汉字,会有一部分人坚持2字节。
方案二总是用4字节记录长度,对于需要频繁切换文本和二进制的情况,这么做容易浪费存储空间。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值