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