0

在内存中有一个字符串并希望使用 将其发送到 Web 服务的情况下BackgroundUploader,我希望避免将其写入磁盘(从而处理临时文件的清理)。

现在就是这样,但我想知道从字符串createUploadFromStreamAsync创建所需的最高效的方法是什么。IInputStream

我想到的第一件事是将其转换为IBufferusing CryptographicBuffer::convertStringToBinary,将其写入 anInMemoryRandomAccessStream并从那里获取 IInputStream 。所以它是 String -> IBuffer -> InMemoryRandomAccessStream -> IInputStream。好麻烦...

完成的第二种方法是做某事new Blob(myString.split('')).msDetachStream().getInputStreamAt(0),当然不会使用尽可能多的本机调用并且具有相同数量的步骤。即字符串 -> 数组 -> Blob -> IInputStream。

您处理这种转换的方法是什么?

4

1 回答 1

0

在这种情况下不应该使用 CryptographicBuffers 的方法 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))]).msDetachStream().getInputStreamAt(0)

流字节顺序和编码可能会产生显着差异,具体取决于您使用它的方式。实际上第二种方法可能需要根据编码格式使用另一种方式来拆分字符串。

于 2016-02-22T14:33:54.313 回答