使用C#的讀文件操作代碼如下:
using (FileStream input = File.OpenRead("binarydata.dat"))
using (BinaryReader reader = new BinaryReader(input))
{
int intRead = reader.ReadInt32();
byte[] byteRead = reader.ReadBytes(4);
string stringRead = reader.ReadString();
char charRead = reader.ReadChar();
}
其中的ReadString()方法並沒有參數告訴它字符串內有多少個字符,它是怎麼自動判斷的呢?
查閱了MSDN幫助,裡面這個方法的說明是這樣的
從當前流中讀取一個字符串。字符串有長度前綴,一次 7 位地被編碼為整數。
說字符串有長度前綴,沒沒見到這個前綴啊?請大神指導
BinaryWriter.Write(string)會先把字符串的(UTF8編碼字節串)**長度**寫入,長度用的是"可變長編碼",因此可能有1/2/3/4等字節不等。
用於長度的每個字節只用7個比特,最高位用來表示是否有後續長度字節。這樣作可以節省空間,比如128以內只要用一個字節來表示長度:
00000101, 最高位零,因此長度為5。
10000001, 00000011, 第一個字節的最高位為1,表示後續字節也要用,用兩個字節來表示長度為 1 * 128 + 3 = 131。