如何在不使用.Net托管流的情况下将一个UWP IRandomAccessStream追加到另一个

时间:2018-12-13 10:24:09

标签: c# uwp

是否有一种不使用.Net方法进行追加的方法? 还是使用成本甚至为零?

IRandomAccessStream sourceStream;
IRandomAccessStream destinationStream;

// This uses .Net managed stream but I want to avoid that
sourceStream.AsStream().CopyTo(destinationStream.AsStream());

1 个答案:

答案 0 :(得分:0)

  

是否有一种不使用.Net方法进行追加的方法?

我认为您可以使用字节数组作为代理来处理。

将IRandomAccessStream转换为字节[]

async Task<byte[]> Convert(IRandomAccessStream s)
{
    var dr = new DataReader(s.GetInputStreamAt(0));
    var bytes = new byte[s.Size];
    await dr.LoadAsync((uint)s.Size);
    dr.ReadBytes(bytes);
    return bytes;
}

用于IRandomAccessStream的字节[]

async Task<InMemoryRandomAccessStream> ConvertTo(byte[] arr)
{
    InMemoryRandomAccessStream randomAccessStream = new InMemoryRandomAccessStream();
    await randomAccessStream.WriteAsync(arr.AsBuffer());
    randomAccessStream.Seek(0); // Just to be sure.                   
    return randomAccessStream;
}

用于串联字节数组

byte[] combined = bytesOne.Concat(bytesTwo).Concat(bytesThree).ToArray();