C#之I/O系統(一)

來源:互聯網
上載者:User

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類,直接讀寫位元據。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.