1

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

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

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

4

3 回答 3

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);
于 2013-01-24T17:35:24.410 回答
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] 注释,这可能表示以后的更改。但是,环顾四周后,我找不到有关安全代码注释的任何其他信息。

于 2013-02-08T23:54:45.030 回答
0

我知道这是一个非常古老的问题,但是我今天自己遇到了这个问题并想通了,所以我将把它留给其他人。

我意识到如果流太小,则不会写入流。为了解决这个问题,我明确设置了流的长度,如下所示:

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

这应该就是你所需要的。

于 2015-04-09T20:49:28.040 回答