簡體   English   中英

如何從windows8商店應用程序中的字節數組中獲取流

[英]How to get a stream from a byte array in a windows8 store app

我一直在嘗試使用以下代碼從metro風格應用程序中的字節數組中獲取流。

InMemoryRandomAccessStream memoryStream = new InMemoryRandomAccessStream();
memoryStream.AsStreamForWrite().Write(byteArray, 0, byteArray.Length);
memoryStream.Seek(0);

它執行時沒有錯誤,但流大小為零(0)。 誰能告訴我為什么它的尺寸為零?

您可以使用DataWriterDataReader類。 例如 ...

// put bytes into the stream
var ms = new InMemoryRandomAccessStream();
var dw = new Windows.Storage.Streams.DataWriter(ms);
dw.WriteBytes(new byte[] { 0x00, 0x01, 0x02 });
await dw.StoreAsync();

// read them out
ms.Seek(0);
byte[] ob = new byte[ms.Size];
var dr = new Windows.Storage.Streams.DataReader(ms);
await dr.LoadAsync((uint)ms.Size);
dr.ReadBytes(ob);

您還可以使用BinaryWriter / BinaryReader來讀取和寫入byte []和Streams。

    private Stream ConvertToStream(byte[] raw)
    {
        Stream streamOutput = new MemoryStream();
        using (BinaryWriter writer = new BinaryWriter(streamOutput))
        {
            writer.Write(raw);
        }
        return streamOutput;
    }

另一種選擇是使用內置的擴展方法,如Marc Gravell已經提到的:

    private Stream ConvertToStream(byte[] raw)
    {
        return raw.AsBuffer().AsStream();
    }

擴展方法用[Security Critical]評論,這可能表示稍后的更改。 但是,在環顧四周之后,我找不到有關安全代碼注釋的任何其他信息。

我知道這是一個非常古老的問題,但是我今天自己也遇到了這個問題,並且想出來了,所以我會把它留給其他人。

我意識到如果它太小的話就沒有寫入流。 為了解決這個問題,我明確地設置了流的長度,如下所示:

ms.AsStreamForWrite(imageBytes.Length).Write(imageBytes, 0, imageBytes.Length);

這應該就是你所需要的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM