♥使用文本,便于人类阅读;使用二进制,便于机器处理。
如何把文本和二进制数据混合存储在一个文件里呢?
总的来说,有两套方案。一是默认文本,扩展二进制;二是默认二进制,扩展文本。
♥先说一。选择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字节记录长度,对于需要频繁切换文本和二进制的情况,这么做容易浪费存储空间。
把文本和二进制数据混合存储的方案
最新推荐文章于 2024-05-09 17:22:03 发布