Windows 8 WinJS:IInputStream来自字符串
在内存中有一个字符串并希望使用Windows 8 WinJS:IInputStream来自字符串,windows-8,windows-store-apps,winjs,Windows 8,Windows Store Apps,Winjs,在内存中有一个字符串并希望使用BackgroundUploader将其发送到web服务的情况下,我希望避免将其写入磁盘(从而处理临时文件的清理) 现在有了解决方案,但我想知道从字符串创建所需的IInputStream最有效的方法是什么 我想到的第一件事是使用cryptographicsbuffer::convertStringToBinary将其转换为IBuffer,然后将其写入并从中获取IIInputStream。这就是字符串->IBuffer->InMemoryRandomAccessStr
BackgroundUploader
将其发送到web服务的情况下,我希望避免将其写入磁盘(从而处理临时文件的清理)
现在有了解决方案,但我想知道从字符串创建所需的IInputStream
最有效的方法是什么
我想到的第一件事是使用cryptographicsbuffer::convertStringToBinary
将其转换为IBuffer
,然后将其写入并从中获取IIInputStream。这就是字符串->IBuffer->InMemoryRandomAccessStream->IInputStream。相当麻烦
第二种方法是执行类似于newblob(myString.split(“”)).msDetachStream().getInputStreamAt(0)
的操作,当然它不会使用那么多本机调用,并且具有相同的步骤数。即字符串->数组->Blob->IInputStream
处理此转换的方法是什么?在这种情况下,替代方法1(不应使用加密缓冲区)的测试和工作版本是:
var randomAccessStream = new Windows.Storage.Streams.InMemoryRandomAccessStream();
var dataWriter = new Windows.Storage.Streams.DataWriter(randomAccessStream);
dataWriter.unicodeEncoding = Windows.Storage.Streams.UnicodeEncoding.utf8;
dataWriter.byteOrder = Windows.Storage.Streams.ByteOrder.littleEndian;
dataWriter.writeString(myString);
dataWriter.storeAsync().then(function () {
return dataWriter.flushAsync();
}).then(function () {
var stream = dataWriter.detachStream();
stream.seek(0);
dataWriter.close();
stream;
});
方法2的测试和工作版本很简单:new Blob([new Uint8Array(Array.from(myString))).msmetachstream().getInputStreamAt(0)
流字节顺序和编码可能会产生显著的差异,这取决于您如何使用它。事实上,第二种方法可能需要使用另一种方法来拆分字符串,具体取决于编码格式。这个问题可能会给出一些解决方案。是的,这就是我在第一种方法中提出的第二种方法是否需要拆分调用?我读了-这不好吗
var blob=new blob([myString]).msDetachStream().getInputStreamAt(0)代码>打得好,我试试看!我想知道JS引擎是否会在原始字符串上运行,或者它是否也会创建一个副本。。。