IStream 接口

IStream 接口

https://msdn.microsoft.com/en-us/library/windows/apps/aa380034

IStream接口允许您读取和写入 stream 对象的数据。流对象包含结构化的存储对象,存贮在哪里提供结构中的数据。简单的数据可以直接写入流,但最频繁,溪流是元素嵌套在一个存储对象。他们是类似于标准的文件。

IStream接口定义方法类似于的 MS-DOS 脂肪的文件功能。例如,每个流对象都有其自己的访问权限和查找指针。DOS 文件和流对象之间的主要区别是,在后者的情况下,流打开使用IStream接口指针,而不是一个文件句柄。

此接口中的方法呈现您的对象的数据作为一系列连续的你可以读取或写入的字节数。也有犯下和恢复是开放在事务处理的模式和方法来限制访问到某个范围的字节流中的流上更改方法。

溪流而无需占用文件系统资源的较长时间内可以保持打开状态。IUnknown::Release方法是类似于文件上的关闭功能。一旦释放,流对象将不再有效,不能使用。

客户端的异步名字对象可以选择之间数据推送或数据抽取的模型驱动异步IMoniker::BindToStorage操作和接收异步通知。更多的信息,请参阅URL 名字对象。下表比较行为的异步ISequentialStream::ReadIStream::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 复合文件实现功能时容器或对象应用程序上实现IStreamIStream该规范定义了更多的功能比 COM 执行支持。此外,如果您正在创建大于你的机器内存中堆的流对象和您正在使用的全局内存句柄,复合文件执行GlobalReAlloc在内部调用每当它需要更多的内存,可以是非常低效。在这种情况下,首选的解决方案是实现IStream使用由VirtualAlloc GlobalAlloc而分配的内存。这可以保留大量的虚拟地址空间,然后提交作为所需地址空间中的内存。没有数据复制发生和内存是承诺,它需要时才。更多的信息,请参阅IStream-复合文件执行

IStream接口从ISequentialStream继承了的方法。

注意大多数容器不实现ISequentialStream作为一个单独的接口,你并不需要分别提供它,即使您提供IStream执行。例如的复合文件实现的结构化存储为ISequentialStream不成功调用方法,但它包括通过IStream接口指针的的方法。

何时使用

从一个容器或应用程序来读取和写入对象的数据调用IStream接口的方法。因为流对象可以封送到其他进程,应用程序可以共享存储对象中的数据,而无需使用全局内存。

成员

IStream接口从IUnknown接口继承。IStream也有这些类型的成员︰

方法

IStream接口具有这些方法。

显示︰继承保护

方法 描述
克隆 Clone
创建一个新的流对象引用原来相同的字节流,但提供一个单独的寻求那些字节的指针。

提交 Commit
确保做一个 stream 对象在事务处理模式中打开的任何更改都反映在父存储对象。

CopyTo
复制指定的数目的字节从当前查找指针在当前流寻求另一个流中的指针。

LockRegion
限制到指定的流中的字节范围的访问。支持这项功能是可选的因为一些文件系统不提供它。

 Read
读取指定的数目的字节从流对象读入内存起价当前查找指针。

(从ISequentialStream的继承)

还原 Revert

放弃自上次调用IStream::Commit对事务处理流进行的所有更改。

寻求 Seek
将查找指针更改到新的位置相对于开始的流,流或当前查找指针的结尾。

SetSize
更改流对象的大小。

统计 Stat
检索此流的STATSTG结构。

UnlockRegion
移除以前限制与IStream::LockRegion的字节范围的访问限制。

 Write
写入指定的起价当前的流对象的字节数查找指针。

(从ISequentialStream的继承)

时间: 2024-10-18 11:09:33

IStream 接口的相关文章

golang中interface接口的深度解析

什么是interface,简单的说,interface是一组method的组合,下面这篇文章主要给大家深度解析了关于golang中的interface接口,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧. 一 接口介绍 如果说gorountine和channel是支撑起Go语言的并发模型的基石,让Go语言在如今集群化与多核化的时代成为一道亮丽的风景,那么接口是Go语言整个类型系列的基石,让Go语言在基础编程哲学的探索上达到前所

【转载】COM 组件设计与应用(一)——起源及复合文件

原文:http://vckbase.com/index.php/wv/1201.html 一.前言 公元一九九五年某个夜黑风高的晚上,我的一位老师跟我说:“小杨呀,以后写程序就和搭积木一样啦.你赶快学习一些OLE的技术吧......”,当时我心里就寻思 :“开什么玩笑?搭积木方式写程序?再过100年吧......”,但作为一名听话的好学生,我开始在书店里“踅摸”(注1)有关OLE的书籍(注2).功夫不负有心人,终于买到了我的第一本COM书<OLE2 高级编程技术>,这本800多页的大布头花费了

VC++使用CImage在内存中Bmp转换Jpeg图片

之前写了一篇<VC++使用CImage在内存中Jpeg转换Bmp图片>,通过CImage实现了在内存中Jpeg转Bmp. 既然Jpeg能转Bmp,那CImage也支持Bmp转Jpeg,与上一篇文章依赖CImage的Load函数相反,Bmp转Jpeg通过Save函数实现: 使用的也是IStream接口的函数重载,具体可以参考MSDN:http://msdn.microsoft.com/zh-cn/library/d06f3fhw.aspx 下面贴出使用CImage在内存中Bmp转换Jpeg的代码

XMLHTTP使用具体解释

XMLHTTP对象是Microsoft的MSXML开发包中带的一个用HTTP,XML协议訪问web资源的对象. 从MSXML3.0開始出现. 它在AJAX技术中主要用来从其它网络资源获取信息,然后由javascript来更新页面中的部分内容. 採用这样的方法将页面可更新内容细化,不须要更新非常少的内容而刷新整个页面. XMLHTTP对象的用法例如以下: 1- 创建XMLHTTP对象,不同的浏览器创建方式不同,本文以IE为例说明. 2- 用XMLHTTP对象向外部资源发送请求信息, 同步或异步获得

IStorage

IStorage 接口支持结构化存储对象的创建和管理. 结构化存储允许分层存储在单个文件的信息,和通常被称为“文件系统内文件”. 元素的结构化存储对象存储和小溪. 存储类似于目录,和流类似于文件. 在一个结构化的存储将会有一个可能包含substorages主存储对象,可能是嵌套的,和小溪. 存储提供对象的结构,包含数据流,通过操纵 IStream 接口. 的 IStorage 接口提供了创建和管理方法根存储对象,孩子存储对象,和流对象. 这些方法可以创建.开放.枚举.移动.复制.重命名或删除元素

GlobalLock

HGLOBAL hImageMemory=GlobalAlloc(GMEM_MOVEABLE, dwFileSize); //给图片分配全局内存 void *pImageMemory=GlobalLock(hImageMemory); //锁定内存 //锁定内存的同时,获得句柄hImageMemory指向的内存的实际地址赋给pImageMemory,接着便可以通过*pImageMemory对实际地址进行操作. DWORD dwReadedSize; //保存实际读取的文件大小 ReadFile(

Ajax提交底层原型XMLHttpRequest

相信接触过ajax的都觉得其post,get提交很方便,那么他是怎么实现的呢?基于此我们就不得不谈到js中的XMLHttpRequest对象. 其中w3c中是这样解释的: XMLHttpRequest 对象用于在后台与服务器交换数据. XMLHttpRequest 对象是开发者的梦想,因为您能够: 在不重新加载页面的情况下更新网页 在页面已加载后从服务器请求数据 在页面已加载后从服务器接收数据 在后台向服务器发送数据 所有现代的浏览器都支持 XMLHttpRequest 对象. XMLHttpR

Go初探

官方网站:https://golang.org/ 标准库文档:https://golang.org/pkg/ 在线编码学习:https://play.golang.org/ PS:请自行FQ 简介安装Hello World 实例编译基础语法行分隔符注释标识符关键字数据类型指针类型(Pointer)数组(Array)结构化类型(struct)接口类型(interface)Map 类型Any类型类型转换类型增加方法变量作用域值类型和引用类型常量iota运算符运算符优先级条件与循环语句函数返回多个值参

VC操作Image的三种方法(收集)

忘记从哪来收集过来的资料了,暂且不管是哪位老兄写的,只道一声谢谢. 仅管VC有提供相应的API和类来操作bmp位图.图标和(增强)元文件,但却不支持jpg.gif和png等格式的图片,而这几种格式却是常常要用到的.这里我给大家介绍两种办法来操作这些格式的图片. 1.用API OleLoadPicture来加载JPG.GIF格式的图片(注:不支持PNG格式,另外GIF只能加载第一帧,且不支持透明) OleLoadPicture 函数实际上创建了一个IPicture类型的COM接口对象,然后我们可以