【C#IO 操作】stream 字節流|字符流 |比特流


 

stream的簡介

Stream 所有流的抽象基類。 流是字節序列的抽象,例如文件、輸入/輸出設備、進程中通信管道或 TCP/IP 套接字。 Stream類及其派生類提供這些不同類型的輸入和輸出的一般視圖,並將程序員與操作系統和基礎設備的具體詳細信息隔離開來。

.net中對於IO流的支持分為兩個層次:基於比特的和基於字節兩種方式,字符流是基於字節流的,用不同的編碼方式讀取字節流。

字符流:實現System.IO.TextReader和TextWaiter抽象類是所有基於字符流的父類,以特定編碼從字節流中讀取字符。

字節流:基於字節的方式適用於操作二進制文件,比如exe文件、視頻、音頻文件等等。
Stream抽象類是所有基於字節方式的流的父類。

字符流中TextReader和TextWaiter是抽象類是stream的讀寫器。

stream的操作方式

流涉及三個基本操作:

  • 可以從流中讀取。 讀取是將數據從流傳輸到數據結構(如字節數組)中。

  • 可以寫入流。 寫入是指將數據從數據結構傳輸到流中。

  • 流可以支持查找。 查找是指查詢和修改流中的當前位置。 查找功能取決於流具有的后備存儲的類型。 例如,網絡流沒有當前位置的統一概念,因此通常不支持查找。

     

     

    繼承自的一些常用流 StreamFileStream 、和 MemoryStream

    根據基礎數據源或存儲庫,流可能只支持其中一些功能。 您可以使用 CanRead 類的、和屬性查詢流的功能 CanWrite CanSeek Stream

    ReadWrite 方法讀取和寫入各種格式的數據。 對於支持查找的流,請使用 SeekSetLength 方法,並使用 PositionLength 屬性來查詢和修改流的當前位置和長度。

    此類型實現 IDisposable 接口。 在使用完類型后,您應直接或間接釋放類型。 若要直接釋放類型,請在 try/catch 塊中調用其 Dispose 方法。 若要間接釋放類型,請使用 using(在 C# 中)或 Using(在 Visual Basic 中)等語言構造。 有關詳細信息,請參閱 IDisposable 接口主題中的“使用實現 IDisposable 的對象”一節。

    釋放 Stream 對象將刷新所有緩沖數據,並在本質上調用 Flush 方法。 Dispose 還會釋放操作系統資源(如文件句柄、網絡連接或用於任何內部緩沖的內存)。 BufferedStream類提供了圍繞另一個流包裝緩沖流以提高讀寫性能的功能。

    從 .NET Framework 4.5 開始, Stream 類包括異步方法來簡化異步操作。 異步方法 Async 在其名稱中包含,例如 ReadAsync 、、 WriteAsync CopyToAsyncFlushAsync利用這些方法,您可以在不阻塞主線程的情況下執行占用大量資源的 i/o 操作。 在 Windows 8.x 應用商店應用或桌面應用中一個耗時的流操作可能阻塞 UI 線程並讓應用看起來好像不工作時,這種性能的考慮就顯得尤為重要了。 異步方法與 async await Visual Basic 和 c # 中的和關鍵字結合使用。

    在 Windows 8.x 應用商店應用中使用時, Stream 包括兩個擴展方法: AsInputStreamAsOutputStream這些方法將 Stream 對象轉換為 Windows 運行時中的流。 還可以使用和方法將 Windows 運行時中的流轉換為 Stream 對象 AsStreamForRead AsStreamForWrite有關詳細信息,請參閱 如何:在 .NET Framework 流和 Windows 運行時流之間轉換

    某些流實現執行基礎數據的本地緩沖以提高性能。 對於此類流,可以使用 FlushFlushAsync 方法來清除任何內部緩沖區,並確保所有數據都已寫入基礎數據源或存儲庫。

    如果需要一個沒有后備存儲的流 (也稱為 "位桶") ,請使用 Null 字段檢索為此目的而設計的流的實例。

  •  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM