C#之數據流概述
時間:2020-08-05 作者:管理員(yuán) 點擊:680
數據流(也稱流)是一(yī)個 用于傳輸數據的對象。數據的傳輸有兩個方向,如果是數據從外(wài)部源傳輸到程序中(zhōng),就稱之爲讀取流;如果是數據從程序傳輸到外(wài)部源,就稱之爲寫入流。
System.IO.Stream類是所有流的抽象基類,Stream類及其派生(shēng)類提供這些不同類型的輸入和輸出的一(yī)般視圖,使程序員(yuán)不必了解操作系統和基礎設備的具體(tǐ)細節。
根據基礎數據源或存儲庫,流可能隻支持這些功能中(zhōng)的一(yī)部分(fēn)。用戶通過使用CanRead、CanWrite和CanSeek屬性,可實現應用程序查詢流的功能。
Read和Write方法讀寫各種不同格式的數據。對于支持查找流,使用Seek和SetLength方法以及Position和Length屬性可以查詢和修改流的當前位置和長度。
有些流用于實現執行基礎數據的本地緩沖以提高性能。對于這樣的流,Flush方法可用于清除所有内部緩沖區并确保将所有數據寫入基礎數據源或存儲庫。
在Stream上調用Close将刷新所有經過緩沖處理的數據,本質上是爲用戶調用Flush方法。Close也會釋放(fàng)操作系統資(zī)源,如文件句柄、網絡連接或用于任何内部緩沖的内存。BuferedStream類提供了将一(yī)個經過緩沖的流環繞另一(yī)個流的功能,以便提高讀寫性能。
如果需要不帶後備存儲區(即位存儲桶)的流,應使用Null。
在實現Stream的派生(shēng)類時,必須提供Read和Write方法的實現。異步方法BeginRead、EndRead、BegginWrite和EndWrite通過同步方法Read和Write實現。同樣Read和Write實現也将與異步方法一(yī)起工(gōng)作。ReadByte和WriteByte的默認實現創建一(yī)個新的單元素字節數組,然後調用Read和Write的實現。當從Stream派生(shēng)時,如果有内部字節緩沖區,則強烈建議重寫這些方法以訪問内部緩沖區,這樣性能将得到顯著提高。
還必須提供CanRead、CanSeek、CanWrite、Flush、Length、Position、Seek和SetLength的實現。不要重寫Close方法,而應将所有流清理邏輯放(fàng)入Dispose方法中(zhōng)。
C#語音中(zhōng)提供的主要數據流類有NetworkStream(網絡流)、BufferedStream(緩沖區流)、MemoryStream(内存流)、FileStream(文件流)、CryptoStream(加密流)等