C# BinaryReader實現(xiàn)讀取二進制文件
在 C# 以二進制形式讀取數(shù)據(jù)時使用的是 BinaryReader 類。
BinaryReader 類中提供的構造方法有 3 種,具體的語法形式如下。
第1種形式:
BinaryReader(Stream input) //其中,input 參數(shù)是輸入流。
第2種形式:
BinaryReader(Stream input, Encoding encoding) //其中,input 是指輸入流,encoding 是指編碼方式。
第3種形式:
BinaryReader(Stream input, Encoding encoding, bool leaveOpen) //其中,input 是指輸入流,encoding 是指編碼方式,leaveOpen 是指在流讀取后是否包括流的打開狀態(tài)。
下面分別使用不同的構造方法創(chuàng)建 BinaryReader 類的實例,代碼如下。
//創(chuàng)建文件流的實例 FileStream fileStream = new FileStream("D:\\code\\test.txt", FileMode.Open); BinaryReader binaryReader1 = new BinaryReader(fileStream); BinaryReader binaryReader2 = new BinaryReader(fileStream, Encoding.UTF8); BinaryReader binaryReader3 = new BinaryReader(fileStream, Encoding.UTF8, true);
在完成 BinaryReader 類的實例的創(chuàng)建后,即可完成對文件以二進制形式的讀取。
BinaryReader 類中的常用屬性和方法如下表所示。
屬性或方法 | 作用 |
---|---|
int Read() | 從指定的流中讀取字符 |
int Read(byte[] buffer, int index, int count) | 以 index 為字節(jié)數(shù)組中的起始點,從流中讀取 count 個字節(jié) |
int Read(char[] buffer, int index, int count) | 以 index 為字符數(shù)組的起始點,從流中讀取 count 個字符 |
bool ReadBoolean() | 從當前流中讀取 Boolean 值,并使該流的當前位置提升 1 個字節(jié) |
byte ReadByte() | 從當前流中讀取下一個字節(jié),并使流的當前位置提升 1 個字節(jié) |
byte[] ReadBytes(int count) | 從當前流中讀取指定的字節(jié)數(shù)寫入字節(jié)數(shù)組中,并將當前 位置前移相應的字節(jié)數(shù) |
char ReadChar() | 從當前流中讀取下一個字符,并根據(jù)所使用的 Encoding 和從流中讀取的特定字符提升流的當前位置 |
char[] ReadChars(int count) | 從當前流中讀取指定的字符數(shù),并以字符數(shù)組的形式返回 數(shù)據(jù),然后根據(jù)所使用的 Encoding 和從流中讀取的特定字符將當前位置前移 |
decimal ReadDecimal() | 從當前流中讀取十進制數(shù)值,并將該流的當前位置提升 16 個字節(jié) |
double ReadDouble() | 從當前流中讀取 8 字節(jié)浮點值,并使流的當前位置提升 8 個字節(jié) |
short ReadInt16() | 從當前流中讀取 2 字節(jié)有符號整數(shù),并使流的當前位置提升 2 個字節(jié) |
int ReadInt32() | 從當前流中讀取 4 字節(jié)有符號整數(shù),并使流的當前位置提升 4 個字節(jié) |
long ReadInt64() | 從當前流中讀取 8 字節(jié)有符號整數(shù),并使流的當前位置提升 8 個字節(jié) |
sbyte ReadSByte() | 從該流中讀取 1 個有符號字節(jié),并使流的當前位置提升 1 個字節(jié) |
float ReadSingle() | 從當前流中讀取 4 字節(jié)浮點值,并使流的當前位置提升 4 個字節(jié) |
string ReadString() | 從當前流中讀取一個字符串。字符串有長度前綴,一次 7 位地被編碼為整數(shù) |
ushort ReadUInt16() | 從該流中讀取的 2 字節(jié)無符號整數(shù) |
uint ReadUInt32() | 從該流中讀取的 4 字節(jié)無符號整數(shù) |
ulong ReadUInt64() | 從該流中讀取的 8 字節(jié)無符號整數(shù) |
void FillBuffer(int numBytes) | 用從流中讀取的指定字節(jié)數(shù)填充內(nèi)部緩沖區(qū) |
在 BinaryReader 類中提供的方法并不是直接讀取文件中指定數(shù)據(jù)類型的值,而是讀取由 BinaryWriter 類寫入到文件中的。
在上述方法中只有 Read 方法不要求讀取的值必須由 BinaryWriter 類寫入到文件中。
下面通過實例來演示 BinaryReader 類中 Read 方法的使用。
【實例 1】使用 BinaryReader 類讀取記事本文件中的信息。
根據(jù)題目要求,在 D:\code 目錄下創(chuàng)建一個記事本文件,并在其中輸入 abc,使用 BinaryReader 類讀取文件中的內(nèi)容,代碼如下。
class Program { static void Main(string[] args) { FileStream fileStream = new FileStream(@"D:\\code\\test.txt", FileMode.Open); BinaryReader binaryReader = new BinaryReader(fileStream); //讀取文件的一個字符 int a = binaryReader.Read(); //判斷文件中是否含有字符,若不含字符,a 的值為 -1 while(a!= -1) { //輸出讀取到的字符 Console.Write((char)a); a = binaryReader.Read(); } } }
執(zhí)行上面的代碼,效果如下圖所示。
除了使用 Read 方法每次讀取一個字符以外,也可以使用 Read 方法的其他重載方法將字符讀取到一個字節(jié)數(shù)組或字符數(shù)組中。
【實例 2】將 test.txt 記事本中的內(nèi)容讀取到字節(jié)數(shù)組中。
根據(jù)題目要求,代碼如下。
class Program { static void Main(string[] args) { FileStream fileStream = new FileStream(@"D:\\code\\test.txt", FileMode.Open,FileAccess.Read); BinaryReader binaryReader = new BinaryReader(fileStream); //獲取文件長度 long length = fileStream.Length; byte[] bytes = new byte[length]; //讀取文件中的內(nèi)容并保存到字節(jié)數(shù)組中 binaryReader.Read(bytes, 0, bytes.Length); //將字節(jié)數(shù)組轉換為字符串 string str = Encoding.Default.GetString(bytes); Console.WriteLine(str); } }
執(zhí)行上面的代碼,效果與實例 1 中一致。同樣,在讀取文件中的內(nèi)容時也可以將內(nèi)容存放到字符類型的數(shù)組中。
到此這篇關于C# BinaryReader實現(xiàn)讀取二進制文件的文章就介紹到這了,更多相關C# BinaryReader讀取二進制內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
C#設置自定義文件圖標實現(xiàn)雙擊啟動(修改注冊表)
這篇文章介紹的是利用C#設置自定義文件圖標,然后實現(xiàn)雙擊啟動的功能,文章給出了示例代碼,介紹的很詳細,有需要的可以參考借鑒。2016-08-08c#使用htmlagilitypack解析html格式字符串
這篇文章主要介紹了c#使用htmlagilitypack解析html格式字符串的示例,需要的朋友可以參考下2014-03-03C#編程實現(xiàn)向并口設備發(fā)送指令、獲取并口設備的狀態(tài)
這篇文章主要介紹了C#編程實現(xiàn)向并口設備發(fā)送指令、獲取并口設備的狀態(tài),本文直接給出實例代碼,需要的朋友可以參考下2015-06-06