MSStream - 重点是什么?

时间:2014-11-10 11:10:04

标签: stream winjs

请耐心等待我。

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

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

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

我在一段时间后写了一篇博文,以帮助回答有关MSRream和WinRT中遇到的其他奇怪对象类型以及JavaScript应用程序主机的问题。见http://www.kraigbrockschmidt.com/2013/03/22/msstream-blob-objects-html5/。是的,您可以使用MSStreamReader进行某些工作(它是一个同步API),但您也可以将MSStream传递给URL.createObjectURL以将其分配给img.src,依此类推。

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

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

不可否认,这是一个记录不足的领域,这正是我在文件,流,缓冲区和Blob标题Q& A下编写我的系列帖子的原因(最初的帖子在http://www.kraigbrockschmidt.com/2013/03/18/why-doesnt-storagefile-close-method/上)。