檔案與流是資料持久化與傳輸的兩大核心抽象,二者既有本質區別,又緊密交織。
| 維度 | 檔案 | 流 |
|---|---|---|
| 持久性 | 永久(除非刪除) | 暫時(隨物件生命週期) |
| 隨機存取 | 透過檔案系統 API | 僅支援 Seek 的流(如 FileStream、MemoryStream) |
| 中繼資料 | 豐富(名稱、時間、權限、屬性) | 極少(通常僅長度、位置、可讀寫性) |
| 典型用途 | 長期儲存、歸檔、共享 | 資料傳輸、轉換、管線處理、跨層解耦 |
FileStream 實現了「檔案即流」的雙重身份:
Stream,提供標準流操作優秀的 C# 程式碼應面向 Stream 抽象而非具體 FileStream 程式設計。例如序列化方法簽名應為 void Serialize(Stream stream),而非 void Serialize(string path)。這樣同一邏輯即可無縫切換至 MemoryStream(單元測試)、NetworkStream(遠端傳輸)、GZipStream(壓縮)、CryptoStream(加密)等場景,實現真正的開閉原則。