我一直在尝试使用以下代码从metro风格应用中的字节数组中获取流。
InMemoryRandomAccessStream memoryStream = new InMemoryRandomAccessStream();
memoryStream.AsStreamForWrite().Write(byteArray, 0, byteArray.Length);
memoryStream.Seek(0);
它执行时没有错误,但流大小为零(0)。谁能告诉我为什么它的大小为零?
答案 0 :(得分:4)
您可以使用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);
答案 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);
这应该是你所需要的一切。