我使用BinaryWriter.Write()来编写字符串,在msdn中,描述如下:
在BinaryWriter的当前编码中将长度为前缀的字符串写入此流,并根据使用的编码和写入流的特定字符推进流的当前位置.
我认为长度前缀是固定大小的; 但实际上它的大小可变.有关此方法如何计算前缀长度的详细信息?
小智 14
前缀使用未签名的LEB128格式编码:http: //en.wikipedia.org/wiki/LEB128
基本上,如果长度为127或更小,则写入单个字节.如果它更大,则设置高位,并写入长度的下7位.如果仍然没有足够的位(长度为16k或更大),则再次设置高位,并写入另外7位.
因此,存储长度需要尽可能多的字节,每个字节将有7位长度,高位将告诉长度是否存在另一个字节.