主要观点:在 rpc/序列化系统中,常需在进程间传输长字符串,大多为 ASCII 字符串,常用 utf-8 编码但空间效率不高,多数字符可在较小范围表示却用 8 位编码,浪费显著位。为此提出新的元字符串编码算法(meta string encoding),将多数字符用 5 位编码代替 utf-8 的 8 位,可节省 37.5%空间,主要用于编码如字段名等元字符串,可缓存编码结果,编码性能不重要。介绍了三种字符串二进制编码算法(LOWER_SPECIAL、LOWER_UPPER_DIGIT_SPECIAL、UTF-8)及相关编码和解码代码片段,还说明了根据字符串内容选择最佳编码的策略,包括针对不同类型字符串的常用编码方式及 utf-8 为 fallback 编码,以及可联合编码标志和数据或用头信息编码标志等,最后通过基准测试对比 utf-8 编码和 fury 元字符串编码的空间效率。
关键信息:
- 新编码算法可节省 37.5%空间。
- 三种编码算法及各自编码范围。
- 不同类型字符串的最佳编码选择策略。
- 联合编码标志和数据的方式。
- 基准测试对比结果。
重要细节:
LOWER_SPECIAL
编码中各字符的编码范围及起始位标志。LOWER_UPPER_DIGIT_SPECIAL
编码中各字符的编码范围及起始位标志。- Java 和 Golang 中编码和解码的代码实现细节。
- 不同类型字符串如包名、类名等的常用编码方式。
- 基准测试中具体字符串的 utf-8 编码和 fury 元字符串编码的字节数对比。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。