Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows 8 WinJS:IInputStream来自字符串_Windows 8_Windows Store Apps_Winjs - Fatal编程技术网

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引擎是否会在原始字符串上运行,或者它是否也会创建一个副本。。。