stream的簡介
Stream 所有流的抽象基類。 流是字節序列的抽象,例如文件、輸入/輸出設備、進程中通信管道或 TCP/IP 套接字。 Stream類及其派生類提供這些不同類型的輸入和輸出的一般視圖,並將程序員與操作系統和基礎設備的具體詳細信息隔離開來。
.net中對於IO流的支持分為兩個層次:基於比特的和基於字節兩種方式,字符流是基於字節流的,用不同的編碼方式讀取字節流。
字符流:實現System.IO.TextReader和TextWaiter抽象類是所有基於字符流的父類,以特定編碼從字節流中讀取字符。
字節流:基於字節的方式適用於操作二進制文件,比如exe文件、視頻、音頻文件等等。
Stream抽象類是所有基於字節方式的流的父類。
字符流中TextReader和TextWaiter是抽象類是stream的讀寫器。
stream的操作方式
流涉及三個基本操作:
-
可以從流中讀取。 讀取是將數據從流傳輸到數據結構(如字節數組)中。
-
可以寫入流。 寫入是指將數據從數據結構傳輸到流中。
-
流可以支持查找。 查找是指查詢和修改流中的當前位置。 查找功能取決於流具有的后備存儲的類型。 例如,網絡流沒有當前位置的統一概念,因此通常不支持查找。
繼承自的一些常用流 Stream 是 FileStream 、和 MemoryStream 。
根據基礎數據源或存儲庫,流可能只支持其中一些功能。 您可以使用 CanRead 類的、和屬性查詢流的功能 CanWrite CanSeek Stream 。
Read和 Write 方法讀取和寫入各種格式的數據。 對於支持查找的流,請使用 Seek 和 SetLength 方法,並使用 Position 和 Length 屬性來查詢和修改流的當前位置和長度。
此類型實現 IDisposable 接口。 在使用完類型后,您應直接或間接釋放類型。 若要直接釋放類型,請在
try
/catch
塊中調用其 Dispose 方法。 若要間接釋放類型,請使用using
(在 C# 中)或Using
(在 Visual Basic 中)等語言構造。 有關詳細信息,請參閱 IDisposable 接口主題中的“使用實現 IDisposable 的對象”一節。釋放 Stream 對象將刷新所有緩沖數據,並在本質上調用 Flush 方法。 Dispose 還會釋放操作系統資源(如文件句柄、網絡連接或用於任何內部緩沖的內存)。 BufferedStream類提供了圍繞另一個流包裝緩沖流以提高讀寫性能的功能。
從 .NET Framework 4.5 開始, Stream 類包括異步方法來簡化異步操作。 異步方法
Async
在其名稱中包含,例如 ReadAsync 、、 WriteAsync CopyToAsync 和 FlushAsync 。 利用這些方法,您可以在不阻塞主線程的情況下執行占用大量資源的 i/o 操作。 在 Windows 8.x 應用商店應用或桌面應用中一個耗時的流操作可能阻塞 UI 線程並讓應用看起來好像不工作時,這種性能的考慮就顯得尤為重要了。 異步方法與async
await
Visual Basic 和 c # 中的和關鍵字結合使用。在 Windows 8.x 應用商店應用中使用時, Stream 包括兩個擴展方法: AsInputStream 和 AsOutputStream 。 這些方法將 Stream 對象轉換為 Windows 運行時中的流。 還可以使用和方法將 Windows 運行時中的流轉換為 Stream 對象 AsStreamForRead AsStreamForWrite 。 有關詳細信息,請參閱 如何:在 .NET Framework 流和 Windows 運行時流之間轉換
某些流實現執行基礎數據的本地緩沖以提高性能。 對於此類流,可以使用 Flush 或 FlushAsync 方法來清除任何內部緩沖區,並確保所有數據都已寫入基礎數據源或存儲庫。
如果需要一個沒有后備存儲的流 (也稱為 "位桶") ,請使用 Null 字段檢索為此目的而設計的流的實例。
-