c#Stream學習筆記

C# 溫故而知新:Stream篇(—)

http://www.cnblogs.com/JimmyZheng/archive/2012/03/17/2402814.htmlhtml

基本概念重點看這一篇。程序員

什麼是Stream?

MSDN 中的解釋太簡潔了: 提供字節序列的通常視圖c#

(我可不想這麼理解,這一定讓我抓狂,我理解的流是向天然界的河流那樣清澈而又美麗,c#中的流也是同樣,許多技術或者說核心技術都須要流的幫忙)數組

那什麼是字節序列呢?

其實簡單的來理解的話字節序列指的是:數據結構

字節對象都被存儲爲連續的字節序列,字節按照必定的順序進行排序組成了字節序列異步

那什麼關於流的解釋能夠抽象爲下列狀況:編輯器

打個比方:一條河中有一條魚遊過,這個魚就是一個字節,這個字節包括魚的眼睛,嘴巴,等組成8個二進制,顯然這條河就是咱們的核心對象:流性能

 *4: void Flush():這點必須說得仔細些:ui

    當咱們使用流寫文件時,數據流會先進入到緩衝區中,而不會馬上寫入文件,當執行這個方法後,緩衝區的數據流會當即注入基礎流編碼

     MSDN中的描述:使用此方法將全部信息從基礎緩衝區移動到其目標或清除緩衝區,或者同時執行這兩種操做。根據對象的狀態,可能須要修

     改流內的當前位置(例如,在基礎流支持查找的狀況下即如此)當使用 StreamWriter 或 BinaryWriter 類時,不要刷新 Stream 基對象。

     而應使用該類的 Flush 或 Close 方法,此方法確保首先將該數據刷新至基礎流,而後再將其寫入文件。

(紅色部分爲關鍵請你們務必可以理解,從此會在相應的章節中介紹)

*9: abstract void Write(byte[] buffer,int offset,int count)

這個方法包含了3個關鍵的參數:緩衝字節數組,位移偏量和讀取字節個數

和read方法不一樣的是 write方法中的第一個參數buffer已經有了許多byte類型

的數據,咱們只需經過設置 offset和count來將buffer中的數據寫入流中

*10: virtual void Close()

關閉流並釋放資源,在實際操做中,若是不用using的話,別忘了使用完流以後將其關閉

這個方法特別重要,使用完當前流千萬別忘記關閉!

C# 溫故而知新:Stream篇(

http://www.cnblogs.com/JimmyZheng/archive/2012/03/19/2405216.html#no1

詳細介紹了TextReader和StreamReader的定義概念和一些注意事項,

C#--流與文件(Stream & File)(一)

http://www.cnblogs.com/long-gengyun/archive/2010/03/28/1698681.html

 

  • 流概念 

 流是字節序列的抽象概念,如文件的操做,輸入/輸出設備,內部進行通訊的管道等,Stream類及其派生類提供這些不一樣類型的輸入和輸出的通常視圖,這樣的程序員就沒必要熟悉操做系統和基礎設備的具體細節,也能夠對流進行操做。

流經常使用的三個基本操做:

1. 讀取流:操做是從流到數據結構的數據傳輸

2. 寫入流:該操做時從數據結構到流的數據傳輸

3. 流支持查找:查找是對流內的當前位置進行查詢與修改

以上三個功能能夠經過CanRead ,CanWrite,CanSeek屬性進行設置。

Read和Write方法支持讀寫各類不一樣格式的數據。對於支持查找功能的流,可使用Seek和SetLength方法以及Length和Position屬性查詢和修改流當前的位置和長度。

 有些流實現執行數據的本地緩衝以提升性能。對於這樣的流,Flush方法可用於清除內部緩衝區並確保將全部數據寫入數據源或存儲器。 

在實現Stream的派生類時,必須提供Read和Write方法的實現。異步方法BeginRead,EndRead,BeginWrite和EndWrite經過同步方法Read和Write實現。ReadByte和WriteByte能夠實現建立一個新的單元字節數組,而後調用Read和Write實現。

  • 文件概述 

文件在操做時表現爲流,即流是從一些輸入中讀取到的一系列字節。

文件按信息在外部存儲器上齶編碼方式能夠分爲文本文件和二進制文件。

 

Stream類是System.IO命名空間中的一個類,在System.IO命名空間中,包含全部容許在數據流和文件上進行同步和異步讀取和寫入的類,下面簡單介紹一下經常使用的類。

1. Directory類:包含了全部操做目錄的靜態方法,如目錄的建立,移動,複製,刪除等

2. DirectoryInfo類:包含了全部操做目錄的實例方法,如目錄的各類屬性(名字,建立時間),目錄的各類操做(目錄的建立,是否存在,移動,刪除等)

3. File類:是對文件的典型操做,提供文本的建立,打開,複製,刪除,移動等靜態方法。也能夠用於獲取文件和設置文件的基本信息。

4. FileInfo類:對文件的典型操做, 提供文本的建立,打開,複製,刪除,移動等實例方法。當文件須要屢次重用時,使用FileInfo類提供的實例方法,不可使用File提供的靜態方法。

5. FileStream類:該類實現了對文件讀取,寫入,打開,關閉操做,支持隨機訪問文件,可使用同步方式打開文件進行讀寫,也能夠用異步方式打開文件進行讀寫。

6. Path類:該類對包含文件或目錄路徑信息的String實例操做,這些操做能夠跨平臺的方式執行的。

7. MemoryStream類:該類建立起支持存儲區爲內存的流。

8. StreamReader類:該類能夠讀取標準文本文件的內容。即實現一個TextReader。默認編碼格式爲UTF-8。

9. StreamWriter類:該類能夠往標準文本文件中寫入內容。即實現一個TextWriter。默認編碼格式爲UTF-8。

10. StringReader類: 該類實現從字符串進行讀取的TextReader。

11. StringWriter類:該類實現將信息寫入字符串,該信息存儲在基礎的StringBuilder中。

12. TextReader類:該類表示可讀取連續字符系統的閱讀器。

13. TextWriter類:該類表示能夠編寫一個有序字符系列的編輯器,是抽象類。 

C#:文件、byte[]、Stream相互轉換

http://www.cnblogs.com/warioland/archive/2012/03/06/2381355.html

 

/// C# Stream 和 byte[] 之間的轉換 /// 將 Stream 轉成 byte[]
 
public byte[] StreamToBytes(Stream stream) { byte[] bytes = new byte[stream.Length]; stream.Read(bytes, 0, bytes.Length); // 設置當前流的位置爲流的開始
    stream.Seek(0, SeekOrigin.Begin); return bytes; } /// 將 byte[] 轉成 Stream
 
public Stream BytesToStream(byte[] bytes) { Stream stream = new MemoryStream(bytes); return stream; }
///Stream 和 文件之間的轉換 ///將 Stream 寫入文件
public void StreamToFile(Stream stream,string fileName) { // 把 Stream 轉換成 byte[]
    byte[] bytes = new byte[stream.Length]; stream.Read(bytes, 0, bytes.Length); // 設置當前流的位置爲流的開始
    stream.Seek(0, SeekOrigin.Begin); // 把 byte[] 寫入文件
    FileStream fs = new FileStream(fileName, FileMode.Create); BinaryWriter bw = new BinaryWriter(fs); bw.Write(bytes); bw.Close(); fs.Close(); }
///從文件讀取 Stream

 public Stream FileToStream(string fileName) { // 打開文件
    FileStream fileStream = new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.Read); // 讀取文件的 byte[]
    byte[] bytes = new byte[fileStream.Length]; fileStream.Read(bytes, 0, bytes.Length); fileStream.Close(); // 把 byte[] 轉換成 Stream
    Stream stream = new MemoryStream(bytes); return stream; }

 

FileStream讀寫文件【StreamWriter 和 StreamReader】

http://www.cnblogs.com/yank/archive/2007/11/16/961878.html

相關文章
相關標籤/搜索