C#IO系統 一

I/O系統從某種意義上來說可分爲兩大類,一是控制檯,而是文件系統,包含顯示器,硬盤等。在C#中是通過數據流的方式來進行I/O操作的。什麼是數據流呢?數據流是一種對產生和使用信息的抽象。在C#中,I/O操作的最小單位是字節,因爲大多數設備在進行I/O操作時都是基於字節的。而對於人來說,我們常常習慣於使用字符來進行通信。C#中含有兩種基本數據流,即字節數據流和字符數據流,同時也提供了一些類用於兩者之間的轉換。

.NET Framework中定義了字節數據流類和字符數據流類,而所有的核心數據流類都是在System.IO名稱空間中,如果需要使用這些類需要使用下面的語句,

using System.IO

由於Console類定義在System名稱空間中,所以不需要爲控制檯的輸入輸出指定System.IO名稱空間。

(一)數據流類

C#中的核心數據流類是System.IO.Stream,Stream類是所有數據流類的基類,它是一個抽象類,不能實例化。下面介紹一下其包含的常用的方法和常用屬性。

方法 說明
void Close() 關閉數據流
void Flush() 向物理設備寫入數據流中的內容
int ReadByte() 返回輸入數據流中的下一個可用字節的整數表示,到達文件末尾時返回-1
int Read(byte[] buffer,int offset,int count) 試着讀取count個字節,並從buffer[offset]開始將數據寫入buffer數組,返回成功讀取的字節數
long Seek(long offset,SeekOrigin origin) 在數據流中將當前位置設定在origin+offset處,返回新的地址
void WriteByte(byte value) 把單個字節輸入數據流中
int Read(byte[] buffer,int offset,int count) 把數組buffer中從buffer[offset]開始的count個字節寫入輸出流,返回寫入的字節數

屬性 說明
bool CanRead 如果數據流可讀,屬性爲真,只讀屬性
bool CanWrite 如果數據流可寫,屬性爲真,只讀屬性
bool CanSeek 如果數據流支持位置請求,屬性爲真,只讀屬性
bool Position 該屬性提供數據流的當前位置,讀寫屬性
bool Length 該屬性提供數據流的長度,讀寫屬性
bool CanTimeout 如果數據流支持超時操作,屬性爲真,只讀屬性
int ReadTimeout 該屬性指定讀操作的超時時間,讀寫屬性
int WriteTimeout 該屬性指定寫操作的超時時間,讀寫屬性

從Stream類派生出一些具體的字節數據流類,這些數據流類都定義在System.IO名稱空間中,包括BufferedStream類,FileStream類,MemoryStream類和UnmanagedMemoryStream類。

要創建字符數據流,需要將字節數據流包裝在一個C#字符數據流包裝類中。字符數據流層次結構的最頂層是抽象類TextReader和TextWriter,所有的派生類都必須實現這兩個抽象類所定義的方法。

TextReader類定義的輸入方法有:

方法 說明
int Peek() 從輸入數據流中獲取下一個字符,但是不移除該字符,如果沒有可用字符,則返回-1
int Read() 返回輸入數據流中的下一個可用字符的整數形式,當到達數據流末端時返回-1
int Read(char[] buffer,int index,int count) 嘗試讀取count個字符,並從buffer[index]開始將數據寫入buffer數組,返回成功讀取的字符個數
int ReadBlock(char[] buffer,int index,int count) 嘗試讀取count個字符,並從buffer[index]開始將數據寫入buffer數組,返回成功讀取的字符個數
string ReadLine() 讀取下一行文本並將其作爲字符串返回,如果試圖在文本末尾進行讀取,就返回null
string ReadToEnd() 讀取數據流中從當前位置到結尾的所有字符,並將其作爲字符串返回

TextWriter類定義了各種版本的Write函數和WriteLine函數。除了這些函數,TextWriter類還定義了Close()和Flush()函數。其中,Flush()函數用於將輸出緩衝區中的數據寫入物理介質中,而Close()函數用於關閉寫入程序並釋放資源。

TextReader和TextWriter類作爲抽象類,由一些基於字符的數據流類來實現。這些數據流包括StreamReader,StreamWriter,StringReader和StringWriter。

除了上面介紹的字節數據流和字符數據流外,C#中還定義了一種二進制數據流,BinaryReader和BinaryWriter類,直接讀寫二進制數據。

發佈了16 篇原創文章 · 獲贊 7 · 訪問量 11萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章