IStream 接口
IStream接口允許您讀取和寫入 stream 對象的數據。流對象包含結構化的存儲對象,存貯在哪里提供結構中的數據。簡單的數據可以直接寫入流,但最頻繁,溪流是元素嵌套在一個存儲對象。他們是類似於標准的文件。
IStream接口定義方法類似於的 MS-DOS 脂肪的文件功能。例如,每個流對象都有其自己的訪問權限和查找指針。DOS 文件和流對象之間的主要區別是,在后者的情況下,流打開使用IStream接口指針,而不是一個文件句柄。
此接口中的方法呈現您的對象的數據作為一系列連續的你可以讀取或寫入的字節數。也有犯下和恢復是開放在事務處理的模式和方法來限制訪問到某個范圍的字節流中的流上更改方法。
溪流而無需占用文件系統資源的較長時間內可以保持打開狀態。 IUnknown::Release方法是類似於文件上的關閉功能。一旦釋放,流對象將不再有效,不能使用。
客戶端的異步名字對象可以選擇之間數據推送或數據抽取的模型驅動異步IMoniker::BindToStorage操作和接收異步通知。更多的信息,請參閱URL 名字對象。下表比較行為的異步ISequentialStream::Read和IStream::Seek調用中這兩個在IBindStatusCallback::OnDataAvailable返回下載模型︰
IStream 方法調用 | 數據拉入模型中的行為 | 數據推送模型中的行為 |
---|---|---|
讀取 Read 被調用來讀取部分數據 (也就是說,並不是所有的可用數據) | 返回 S_OK。客戶端必須繼續從IBindStatusCallback::OnDataAvailable返回之前讀取所有可用的數據,否則綁定操作被阻止。(那就是,讀取,直到返回 S_FALSE 或 E_PENDING) | 返回 S_OK。即使客戶端返回從IBindStatusCallback::OnDataAvailable在這一點上綁定操作繼續和IBindStatusCallback::OnDataAvailable將再次調用多次,直到綁定完成。 |
讀取 Read 被調用來讀取所有可用的數據 | 如果尚未完成綁定操作,和更多的數據可用時,將再次調用IBindStatusCallback::OnDataAvailable將返回 E_PENDING。 | 數據拉入模型相同。 |
讀取 Read 被調用來讀取所有可用的數據和綁定操作已經結束 (結束的文件) | 返回 S_FALSE。將grfBSC標記設置為 BSCF_LASTDATANOTIFICATION 到IBindStatusCallback::OnDataAvailable的后續調用。 | 數據拉入模型相同。 |
被稱為Seek | 尋求在數據拉模型無法正常工作 | 尋求並不適用於數據推模型。 |
有關此主題的一般信息,請參閱異步名字對象和數據拉模型與數據推模型更具體的信息。請參閱管理內存分配有關 COM 的規則來管理內存的詳細信息。
當執行
當您需要不提供 COM 復合文件實現功能時容器或對象應用程序上實現IStream 。IStream該規范定義了更多的功能比 COM 執行支持。此外,如果您正在創建大於你的機器內存中堆的流對象和您正在使用的全局內存句柄,復合文件執行GlobalReAlloc在內部調用每當它需要更多的內存,可以是非常低效。在這種情況下,首選的解決方案是實現IStream使用由VirtualAlloc GlobalAlloc而分配的內存。這可以保留大量的虛擬地址空間,然后提交作為所需地址空間中的內存。沒有數據復制發生和內存是承諾,它需要時才。更多的信息,請參閱IStream-復合文件執行。
IStream接口從ISequentialStream繼承了讀和寫的方法。
何時使用
從一個容器或應用程序來讀取和寫入對象的數據調用IStream接口的方法。因為流對象可以封送到其他進程,應用程序可以共享存儲對象中的數據,而無需使用全局內存。
成員
IStream接口從IUnknown接口繼承。IStream也有這些類型的成員︰
方法
IStream接口具有這些方法。
方法 | 描述 |
---|---|
克隆 Clone | 創建一個新的流對象引用原來相同的字節流,但提供一個單獨的尋求那些字節的指針。 |
提交 Commit | 確保做一個 stream 對象在事務處理模式中打開的任何更改都反映在父存儲對象。 |
CopyTo | 復制指定的數目的字節從當前查找指針在當前流尋求另一個流中的指針。 |
LockRegion | 限制到指定的流中的字節范圍的訪問。支持這項功能是可選的因為一些文件系統不提供它。 |
讀 Read | 讀取指定的數目的字節從流對象讀入內存起價當前查找指針。 (從ISequentialStream的繼承) |
還原 Revert | 放棄自上次調用IStream::Commit對事務處理流進行的所有更改。 |
尋求 Seek | 將查找指針更改到新的位置相對於開始的流,流或當前查找指針的結尾。 |
SetSize | 更改流對象的大小。 |
統計 Stat | 檢索此流的STATSTG結構。 |
UnlockRegion | 移除以前限制與IStream::LockRegion的字節范圍的訪問限制。 |
寫 Write | 寫入指定的起價當前的流對象的字節數查找指針。 (從ISequentialStream的繼承) |