MSStream - 有什么意义?

  • 本文关键字:MSStream stream winjs
  • 更新时间 :
  • 英文 :


请耐心等待。

当设置WinJS.xhr响应的响应时,我可以将其设置为"ms-stream"或blob。我希望在下载文件时利用流的概念,这样我就不必将整个响应保存在内存中(视频文件可能很大)。

不过,我对"ms-stream"对象所能做的就是用MSStreamReader读取它。如果我能对它说"从流中消耗1024个字节",并"循环"这个,直到流耗尽,那就太好了。然而,从阅读文档(还没有尝试过,所以如果我错了,请纠正我)来看,我似乎只能从流中读取一次(例如readAsBlob方法),并且我无法设置开始位置。这意味着我需要将整个响应作为一个blob读取到内存中。我可以通过首先将responseType设置为"blob"来实现这一点。那么MSStream到底有什么意义呢?

事实证明,方法msDetachStream可以访问底层流,并且不会中断下载过程。我最初认为,在调用此函数时,任何未下载的数据都会丢失,因为文档中提到MSStream对象已关闭。

不久前,我写了一篇博客文章,帮助回答您在WinRT和JavaScript应用程序主机中遇到的有关MSStream和其他古怪对象类型的问题。看见http://www.kraigbrockschmidt.com/2013/03/22/msstream-blob-objects-html5/.是的,您可以使用MSStreamReader来完成某些工作(它是一个同步的API),但您也可以将MSStream传递给URL.createObjectURL以将其分配给img.src等等。

利用MSStream,以下是我写的一些内容:"从技术上讲,MSStream是这个HTML5 File API的扩展,它提供了与WinRT的互操作。当你从一些HTML5 API(比如响应类型为"ms-stream"的XmlHttpRequest,下载文件或视频时会使用它,或者从canvas的msToBlob方法)获取MSStream(或Blob)对象时,您可以将这些结果传递给接受IInputStream或IRandomAccessStream作为输入的各种WinRT API。要使用画布示例,可以将msToBlob中blob中的msRandomAccessStream馈送到Windows.Graphics.Imaging中的API中进行转换或代码转换。使用Windows.Media.Transcoding中的API也可以类似地处理视频流。您可能只想将流的内容写入StorageFile(不一定在文件系统上)或将其复制到缓冲区进行加密。"

所以MSStreamReader并不是终点。MSStream的真正用途是将对象传递到接受上述接口类型的WinRT API中,这打开了许多可能性。

无可否认,这是一个记录不足的领域,这正是为什么我写了一系列标题为"问答"的帖子;A关于文件、流、缓冲区和Blob(最初的帖子在http://www.kraigbrockschmidt.com/2013/03/18/why-doesnt-storagefile-close-method/)。

相关内容

  • 没有找到相关文章

最新更新