首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> C# >> 關於C#

檔案與流的本質區別與聯繫:C# 開發者的核心認知

     編輯:關於C#

檔案與流是資料持久化與傳輸的兩大核心抽象,二者既有本質區別,又緊密交織。

檔案:持久化的有序資料集合

  • 實體存在於磁碟、光碟、USB 等非易失性媒質
  • 具備檔名、路徑、建立時間、存取權限、屬性等中繼資料
  • 邏輯上以樹狀目錄組織,物理上可能分散於多磁區、多磁碟
  • 作業系統提供建立、刪除、重命名、權限控制等管理介面

流:連續位元組序列的統一視圖

  • 抽象概念:提供「連續位元組流」的存取介面,屏蔽底層儲存離散性
  • 來源多元:檔案流、記憶體流、網路流、管道流、加密流、壓縮流…
  • 核心操作:Read、Write、Seek(視具體流支援度而定)
  • 流本身不持久化,僅是資料搬運的通道

關鍵差異對照

維度檔案流
持久性永久(除非刪除)暫時(隨物件生命週期)
隨機存取透過檔案系統 API僅支援 Seek 的流(如 FileStream、MemoryStream)
中繼資料豐富(名稱、時間、權限、屬性)極少(通常僅長度、位置、可讀寫性)
典型用途長期儲存、歸檔、共享資料傳輸、轉換、管線處理、跨層解耦

橋樑:FileStream

FileStream 實現了「檔案即流」的雙重身份:

  • 繼承 Stream,提供標準流操作
  • 持有 OS 檔案控制代碼,映射實體檔案
  • 支援同步/非同步、隨機定位、共享模式控制

設計啟示

優秀的 C# 程式碼應面向 Stream 抽象而非具體 FileStream 程式設計。例如序列化方法簽名應為 void Serialize(Stream stream),而非 void Serialize(string path)。這樣同一邏輯即可無縫切換至 MemoryStream(單元測試)、NetworkStream(遠端傳輸)、GZipStream(壓縮)、CryptoStream(加密)等場景,實現真正的開閉原則。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved