解釋 .NET 中的流體系結構
.NET 流體系結構提供了一個一致的程式設計介面,用於跨不同 I/O 型別進行讀寫操作。它包括用於操作磁碟上的檔案和目錄的類,以及用於壓縮、命名管道和記憶體對映檔案的專用流。
.NET 中的流體系結構依賴於後端儲存和介面卡。
後端儲存
它表示資料儲存,例如檔案或網路連線。它可以充當可以順序讀取位元組的源,也可以充當可以順序寫入位元組的目標。
.NET 中的 Stream 類將後端儲存公開給程式設計師。它公開了用於讀取、寫入和定位的方法。顧名思義,流是流動的資料,可以是每次一個位元組,也可以是特定大小的塊。資料不會像陣列一樣一次全部駐留在記憶體中。流使用的記憶體量很少,而不管原始資料儲存的大小如何。
介面卡
通常,流處理位元組。雖然位元組靈活且高效,但應用程式使用更高級別的抽象。諸如 TextReader/TextWriter 或 XMLReader/XMLWriter 之類的介面卡包裝一個流並提供對更高級別資料結構(如文字字串和 XML)的訪問。
Stream 類
Stream 類定義在 System.IO 名稱空間中,並提供位元組序列的通用檢視。它是一個抽象類,充當所有流的基類。它公開了用於讀取、寫入和查詢操作的方法,以及其他管理功能,例如關閉和重新整理。
Stream 類具有以下成員:
屬性
CanRead – 如果當前流支援讀取,則返回 true。
CanSeek – 如果當前流支援查詢(即查詢和修改流中的當前位置),則返回 true。
CanTimeout – 如果當前流可以超時,則返回 true。
CanWrite – 如果當前流支援寫入,則返回 true。
Length – 返回流的長度(以位元組為單位)。
Position – 獲取或設定當前流中的位置。
Readtimeout – 獲取或設定一個值(以毫秒為單位),該值確定流在超時之前嘗試讀取的時間長度。
WriteTimeout – 獲取或設定一個值(以毫秒為單位),該值確定流在超時之前嘗試寫入的時間長度。
方法
public abstract int Read (byte[] buffer, int offset, int count)
在派生類中被重寫時,從當前流讀取位元組序列,並根據讀取的位元組數遞增流中的位置。
public abstract void Write (byte[] buffer, int offset, int count)
在派生類中被重寫時,將位元組序列寫入當前流,並根據寫入的位元組數遞增此流中的當前位置。
public abstract long Seek (long offset, System.IO.SeekOrigin origin);
在派生類中被重寫時,設定當前流中的位置。
public abstract void Flush ();
在派生類中被重寫時,清除此流的所有緩衝區,並導致任何緩衝資料寫入基礎裝置。
示例
這是一個演示 Stream 用法的完整示例。
using System;
using System.IO;
class Program{
static void Main(string[] args){
// Create a file called test.txt in the current directory:
using (Stream str = new FileStream("sample.txt", FileMode.Create)){
Console.WriteLine(str.CanRead); // True
Console.WriteLine(str.CanWrite); // True
Console.WriteLine(str.CanSeek); // True
str.WriteByte(75);
str.WriteByte(76);
byte[] bytes = { 10, 20, 30 };
str.Write(bytes, 0, bytes.Length); // Write block of 5 bytes
Console.WriteLine(str.Length); // 7
Console.WriteLine(str.Position); // 7
str.Position = 0; // Move back to the start
Console.WriteLine(str.ReadByte()); // 101 Console.WriteLine(str.ReadByte()); // 102
// Read from the stream back into the block array:
Console.WriteLine(str.Read(bytes, 0, bytes.Length)); // 5
// Assuming the last Read returned 5, we'll be at
// the end of the file, so Read will now return 0:
Console.WriteLine(str.Read(bytes, 0, bytes.Length)); // 0
}
}
}輸出
True True True 5 5 75 76 3 0
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP