[英]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)。 誰能告訴我為什么它的尺寸為零?
您可以使用DataWriter和DataReader類。 例如 ...
// 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.