首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

C# BinaryReader.ReadString 原理解析:長度前綴採用 7-bit 編碼壓縮

     編輯:程式設計綜合問答

BinaryReader.ReadString() 無參數卻能正確讀取字串,因其寫入時 (BinaryWriter.Write(string)) 會先寫入**長度前綴**,採用**可變長度編碼 (7-bit encoded int)**。

編碼規則

  • 每位元組僅用低 7 位儲存長度數值,最高位 (MSB) 為**延續旗標**:1 表示後續還有位元組,0 表示結束。
  • 範例:長度 5 → 0x05 (單位元組);長度 131 → 0x81 0x03 (第一位元組 MSB=1,第二位元組 MSB=0)。

讀取流程

  1. 迴圈讀取位元組,取低 7 位累積長度:length |= (b & 0x7F) << (7 * count)。
  2. 直到讀到 MSB=0 的位元組。
  3. 依長度讀取 UTF-8 位元組並解碼為字串。

對應寫入邏輯

protected void Write7BitEncodedInt(int value) {
    while (value >= 0x80) {
        Write((byte)(value | 0x80));
        value >>= 7;
    }
    Write((byte)value);
}

此設計節省空間:短字串 (長度 < 128) 僅需 1 位元組存長度,無需固定 4 位元組 int。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved