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的继承)

IStream 接口的更多相关文章

  1. go语言之接口二

    接口查询: 先来看如下的结构.结构体File实现了Read,Writer,Seek,Close的方法 type File struct{ } func (f *File) Read(buf []byt ...

  2. go语言之接口一

    在Go语言中,一个类只需要实现了接口要求的所有函数,我们就说这个类实现了该接口 我们定义了一个File类,并实现有Read().Write().Seek().Close()等方法.设 想我们有如下接口 ...

  3. BASE64编码和解码(VC源代码) 并 内存加载 CImage 图像

      BASE64可以用来将binary的字节序列数据编码成ASCII字符序列构成的文本.完整的BASE64定义可见 RFC1421和 RFC2045.编码后的数据比原始数据略长,为原来的4/3.在电子 ...

  4. 基于类型系统的面向对象编程语言Go

    (整理自网络) 面向对象编程 Go语言的面向对象编程(OOP)非常简洁而优雅.说它简洁,在于它没有了OOP中很多概念,比如:继承.虚函数.构造函数和析构函数.隐藏的this指针等等.说它优雅,是它的面 ...

  5. go语言入门

    Go语言最主要的特性: 自动垃圾回收 更丰富的内置类型 函数多返回值 错误处理 匿名函数和闭包 类型和接口 并发编程 反射 语言交互性 1.2.4 错误处理Go语言引入了3个关键字用 ...

  6. XMLHTTP使用具体解释

    XMLHTTP对象是Microsoft的MSXML开发包中带的一个用HTTP,XML协议訪问web资源的对象. 从MSXML3.0開始出现. 它在AJAX技术中主要用来从其它网络资源获取信息,然后由j ...

  7. IPicture总结

    1.利用IPicture接口加载.显示图片 IPicture接口管理一个图片对象和它的属性.图片对象提供对Bitmap Icon Metafile的语言不相关的抽象支持.图像对象的主要接口是IPict ...

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

    忘记从哪来收集过来的资料了,暂且不管是哪位老兄写的,只道一声谢谢. 仅管VC有提供相应的API和类来操作bmp位图.图标和(增强)元文件,但却不支持jpg.gif和png等格式的图片,而这几种格式却是 ...

  9. 在VC下显示JPEG、GIF格式图像的一种简便方法

    在VC下显示JPEG.GIF格式图像的一种简便方法 一. 引言  JPEG图像压缩标准随然是一种有损图像压缩标准,但由于人眼视觉的不敏感,经压缩后的画质基本没有发生变化,很快便以较高的压缩率得到了广泛 ...

随机推荐

  1. Linq动态条件

    很多情况下,我们开发程序,需要动态拼接SQL查询语句; 比如  select top 1 * from User where age= 18  and  name = 'renruiquan' 其中红 ...

  2. SignalR + KnockoutJS + ASP.NET MVC4 实现井字游戏

    1.1.1 摘要 今天,我们将使用SignalR + KnockoutJS + ASP.NET MVC实现一个实时HTML5的井字棋游戏. 首先,网络游戏平台一定要让用户登陆进来,所以需要一个登陆模块 ...

  3. i++ and ++i efficiency

    其实这个问题,百度的话,有一大堆的参考资料,但是,在这里,我产生了一些困惑,他们所分析的结果,和我的测试代码不一致,这让我纠结了,所以,再次的写一下这个问题,顺顺思路. 我的测试环境:系统:Windo ...

  4. spring源码分析(二)Aop

    创建日期:2016.08.19 修改日期:2016.08.20-2016.08.21 交流QQ:992591601 参考资料:<spring源码深度解析>.<spring技术内幕&g ...

  5. Repeater绑定数组并显示其值

    web开发中,尤其是对于数据展示,不得不说Repeater是一个万能的控件,而且使用也很方便. 在ASP.NET中将数组绑定到Repeater中请问如何在Repeater前台页面中显示该数组的值? s ...

  6. Oracle查询DQL脚本记录

    --查询列 Select t.sname,t.ssex,t.class from student t --t 别名; Select *from student t; --* 代表查询表内所有数据 '; ...

  7. EF架构~CodeFirst数据迁移与防数据库删除

    回到目录 本文介绍两个概念,防数据库自动删除,这是由于在code first模式下,当数据实体发生变化时,会对原来数据库进行删除,并将新数据表添加进来,但这对于我们的运营环境数据库,是万万不能接受的, ...

  8. 关于stm32的正交解码

    关于正交解码,我先解释何为正交解码,,,,其实名字挺高大上的,,,,还是先说编码器吧 看一下我用过的一种编码器 编码器的 线 数 ,是说编码器转一圈输出多少个脉冲,,,如果一个编码器是500线,,,说 ...

  9. 了不起的Node.js: 将JavaScript进行到底(Web开发首选,实时,跨多服务器,高并发)

    了不起的Node.js: 将JavaScript进行到底(Web开发首选,实时,跨多服务器,高并发) Guillermo Rauch 编   赵静 译 ISBN 978-7-121-21769-2 2 ...

  10. Android WebView 总结 —— 使用HTML5播放视频及全屏方案

    在APP开发的过程中,会碰到需要在WebView中播放视频的需求,下面讲解一下如何在WebView中使用html5播放视频. 1.让视频在各个Android版本能够正常播放 在AndroidManif ...