C++Builder (CB) 提供豐富的流物件體系,以統一介面操作檔案、記憶體、字串、Socket、資料庫 Blob、OLE、資源等異構資料源。本文系統梳理繼承階層、核心類別介面、關鍵輔助類別與實戰應用模式。
TObject
└─ TStream (抽象基類)
├─ THandleStream
│ └─ TFileStream
├─ TCustomMemoryStream
│ ├─ TMemoryStream
│ └─ TResourceStream
├─ TWinSocketStream
├─ TBlobStream
│ └─ TClientBlobStream
├─ TOleStream
└─ TStringStream
| 分類 | 成員 | 說明 |
|---|---|---|
| 屬性 | Position | 目前讀寫位置 (位元組偏移) |
| Size | 流總大小 (位元組) | |
| 方法 | Read/ReadBuffer | 讀取資料到緩衝區,Buffer 版失敗拋出例外 |
| Write/WriteBuffer | 從緩衝區寫入資料 | |
| Seek | 定位 Position (soFromBeginning/Current/End) | |
| SetSize | 調整流大小 | |
| CopyFrom | 從另一流複製指定位元組數 | |
| ReadComponent/WriteComponent | 元件序列化/反序列化 | |
| ReadComponentRes/WriteComponentRes | Windows 資源格式元件序列化 |
注意:TStream 為抽象類,不可直接實例化。
TFileStream *fs = new TFileStream("c:\\boot.ini", fmOpenRead | fmShareDenyWrite);
// 完整支援檔案模式旗標:fmCreate, fmOpenRead, fmOpenWrite, fmOpenReadWrite, fmShareExclusive...
Memory 屬性:直接存取內部記憶體指標LoadFromFile/Stream、SaveToFile/Stream、Clear、SetSizeTResourceStream 繼承此類,唯讀存取 EXE/DLL 資源DataString 屬性:直接存取內部 AnsiStringReadString/WriteString 便利方法new TWinSocketStream(Socket, TimeoutMs)TimeOut 屬性:讀寫超時控制 (毫秒)WaitForData:等待資料可讀/可寫,避免阻塞掛起TBlobField:new TBlobStream(BlobField, bmRead/bmWrite/bmReadWrite)Truncate:從目前位置截斷TClientBlobStreamTOleStream:封裝 OLE IStream 介面TResourceStream:唯讀存取 EXE/DLL 資源 (RT_BITMAP, RT_RCDATA 等)ReadComponent/WriteComponent 內部實作引擎Read/Write/Seek API 操作檔案/記憶體/Socket/BlobTBlobStream 封裝資料庫長欄位讀寫細節TWinSocketStream 解決阻塞 Socket 超時控制
TFileStream *fs = new TFileStream("form.dat", fmCreate);
try {
fs->WriteComponent(MyForm); // 將表單及子元件完整序列化
} __finally {
delete fs;
}
// 還原
TFileStream *fs = new TFileStream("form.dat", fmOpenRead);
TForm *restored = new TForm(Application);
fs->ReadComponent(restored);
掌握 CB 流物件體系,能以極低認知負擔處理各類資料流向轉換,是資料庫、網路、檔案、元件持久化開發的核心基礎設施。