在分析完编码过程中的一些优化后,我们分析下解码过程中的优化。
1,类型到解码函数的映射,由map改成slice,这个优化和编码一样通过typeptr来获取解码函数。
2,通过一个特殊的字符NUL来判断字符串的结尾:为了解码,你必须遍历input buffer里面的字符串,但是判断字符串是否到了结尾的过程很慢:
buf : []byte 里面保存了传递给解码器的字符串序列。
cursor : int64 保存了当前解码的位置。
代码语言:javascript复制buflen := len(buf)
for ; cursor < buflen; cursor { // compare cursor and buflen at all times, it is so slow.
switch buf[cursor] {
case ' ', 'n', 'r', 't':
}
}
一直比较当前位置和buflen的过程非常低效。因此通过在字符串结尾加一个特殊的字符NUL ( 00),就可以在检查其它字符的同时检查结尾字符,不必要去做比较操作。
代码语言:javascript复制for {
switch buf[cursor] {
case ' ', 'n', 'r', 't':
case '