如何从windows8商店应用程序中的字节数组中获取流

时间:2013-01-24 10:52:44

标签: c# .net windows-8 windows-store-apps

我一直在尝试使用以下代码从metro风格应用中的字节数组中获取流。

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

它执行时没有错误,但流大小为零(0)。谁能告诉我为什么它的大小为零?

3 个答案:

答案 0 :(得分:4)

您可以使用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);

答案 1 :(得分:0)

您还可以使用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]评论,可能表示稍后的更改。但是,在稍微查看之后,我无法找到有关安全代码注释的任何其他信息。

答案 2 :(得分:0)

我知道这是一个非常古老的问题,但我今天自己也遇到了这个问题而已经弄清楚了,所以我会把它留给其他人。

我意识到如果它太小的话就没有写入流。为了解决这个问题,我明确地设置了流的长度,如下所示:

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

这应该是你所需要的一切。