程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程綜合問答 >> ead tring-C# BinaryReader.ReadString()方法如何確定從數據流中讀多少內容

ead tring-C# BinaryReader.ReadString()方法如何確定從數據流中讀多少內容

編輯:編程綜合問答
C# BinaryReader.ReadString()方法如何確定從數據流中讀多少內容

使用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。

Forty2
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved