把握VB.NET中的流(Stream)

來源:互聯網
上載者:User
stream 當你第一次用VB.NET讀寫檔案的時候,你肯定會發現VB.NET摒棄了傳統的檔案I/O支援,感覺不習慣。其實,在.NET裡面,微軟用豐富的“流”對象取代了傳統的檔案操作,而“流”,是一個在Unix裡面經常使用的對象。
我們可以把流當作一個通道,程式的的資料可以沿著這個通道”流”到各種資料存放區機構(比如:檔案,字串,數組,或者其他形式的流等)。為什麼我們會摒棄用了那麼久的IO操作,而代之為流呢?其中很重要的一個原因就是並不是所有的資料都存在於檔案中。現在的程式,從各種類型的資料存放區中擷取資料,比如可以是一個檔案,記憶體中的緩衝區,還有InterneT。而流技術使得應用程式能夠基於一個編程模型,擷取各種資料,而不必要學會怎麼樣去擷取遠程web伺服器上的一個檔案的具體技術。我們只需要在應用程式和web伺服器之間建立一個流,然後讀取伺服器發送的資料就可以了。
流對象,封裝了讀寫資料來源的各種操作,最大的優點就是一當你學好怎麼樣操作某一個資料來源時,你就可以把這種技術擴充到其他形形色色的資料來源。
流的種類
流是一個抽象類別,你不能在程式中申明Stream的一個執行個體。在.NET裡面,由Stream派生出5種具體的流,分別是:
    FileStream 支援對檔案的順序和隨機讀寫操作
    MemoryStream 支援對記憶體緩衝區的順序和隨機讀寫操作
    NETworkStream 支援對Internet網路資源的順序和隨機讀寫操作,存在於System.Net.Sockets名稱空間
    CryptoStream 支援資料的編碼和解碼,存在於System.Security.Cryptography 名稱空間
    BufferedStream 支援緩衝式的讀寫對那些本身不支援的對象
並不是所有的Stream都採用用完全一摸一樣的方法,比如讀取本地檔案的流,可以告訴我們檔案的長度,當前讀寫的位置等,你可以用Seek方法跳到檔案的任意位置。相反,讀取遠程檔案的流不支援這些特性。不過,Stream本身有CanSeek, CanRead 和 CanWrite屬性,用於區別資料來源,告訴我們支援還是不支援某中特性。
下面我們簡單介紹一個FileStream類
FileStream類
進行本地檔案操作的時候,我們可以採用FileSteam類, 可以很簡單的讀寫為位元組數組(arrays of bytes)。對於單一資料型別的資料的讀寫,可以採用BinaryReader 和BinaryWriter以及StreamReader,StreamWriter類。 BinaryReader,用特定的編碼將基中繼資料類型讀作二進位值。BinaryWriter以二進位形式將基元類型寫入流,並支援用特定的編碼寫入字串。StreamReader/Writer則是把資料存放區為XML格式。在VB.NET裡面採用那個區別不大,因為所用的類都應用於兩種格式。
VB.NET支援傳統的隨機讀寫檔案,你可以建立檔案,用於儲存Struct,然後根據記錄數訪問。就像在以前的Vb版本中一樣,用FileOpen,FileGet函數。很大程度上,這已經被XML或者資料庫取代。如果你建立新的應用程式,而有不需要考慮跟就版本的相容問題,建議採用.NET的新特性。
不管你將要使用拿一個StreamClass,你都必須建立一個FileStream對象。有很多方式建立,最簡單就是指定檔案路徑,開啟模式,如下面的文法。
Dim fStream As New FileStream(path, fileMode, fileAccess)
Path要包含檔案的路徑以及檔案名稱。fileMode是枚舉類型FileMode的成員之一,如下表所示。fileAccess是枚舉類型FileAccess的成員。Read (唯讀), ReadWrite (讀寫), and Write (寫操作)。決定了檔案的讀寫權限。
成員名稱
說明
Append
開啟現有檔案並尋找到檔案尾,或建立新檔案。
Create
指定作業系統應建立新檔案。如果檔案已存在,它將被改寫。
CreateNew
指定作業系統應建立新檔案。
Open
指定作業系統應開啟現有檔案。
OpenOrCreate
指定作業系統應開啟檔案(如果檔案存在);否則,應建立新檔案。
Truncate
指定作業系統應開啟現有檔案。檔案一旦開啟,就將被截斷為為零位元組大小。
當然,你也可以用 (Open, OpenRead, OpenText, OpenWrite)建立FileStream
Dim FS As New FileStream = IO.File.OpenWrite("c:\Stream.txt")
另外一種方式開啟檔案可以用OpenFileDialog 和 SaveFileDialog控制項的OpenFile方法。
不需要指定任何參數。 OpenFileDialog的OpenFile方法以唯讀方式開啟檔案; SaveFileDialog的OpenFile方法以讀寫方式開啟檔案。
FileStream只支援最基本的操作,把資料寫入位元組數組或者從位元組數組寫入檔案中。如果我們用FileStream把資料儲存在檔案中,首先把資料轉化為Byte數組,然後調用FileStream的Write方法。同樣,FileStream的Read方法,返回的也是位元組數組。你或許不會經常直接使用FileStream對象,我們還是有必要簡單看一下它的準系統
建立FileStream對象之後,調用WriteByte 寫一個位元組到檔案中。 Write方法可以將一個數組寫入檔案中,需要三個參數
Write(buffer, offset, count)
Buffer是要寫入數組地址,offset是位移量,count指寫入位元組數量,Read的文法也一樣。
由於FileStream要跟Bytes Array打交道,所以研究一下ASCIIEncoding 的GetBytes和UnicodeEncoding 的GetChars很有必要
下面的例子是一個轉換操作。
Dim buffer() As Byte
Dim encoder As New System.Text.ASCIIEncoding()
Dim str As String = "This is a line of text"
ReDim buffer(str.Length - 1)
Encoder.GetBytes(str, 0, str.Length, buffer, 0)
FS.Write(buffer, 0, buffer.Length)
注意:必須Resize要寫入的Byte數組為要讀寫的長度。 


相關文章

E-Commerce Solutions

Leverage the same tools powering the Alibaba Ecosystem

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

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

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