Byte[],Stream,Ibuffer,IRandomAccessStream等之间的互相转换(rt,8.1可用,部分Sliverlight 8.1可用)

全段时间做程序,非要让我从IRandomAccessStream类型转换为Byte[]类型,然后我花了九牛二虎之力搞定,顺便整理了下几种不同类型之间的转换方法。。。
Stream 转IRandomAccessStream
方法一:
  1. byte[] bytes = StreamToBytes(stream);
  2. InMemoryRandomAccessStream memoryStream = new InMemoryRandomAccessStream();
  3. DataWriter datawriter = new DataWriter(memoryStream.GetOutputStreamAt(0));
  4. datawriter.WriteBytes(bytes);
  5. await datawriter.StoreAsync();
复制代码

方法二:
  1. var randomAccessStream = new InMemoryRandomAccessStream();
  2. var outputStream = randomAccessStream.GetOutputStreamAt(0);
  3. await RandomAccessStream.CopyAsync(stream.AsInputStream(), outputStream);
复制代码

IRandomAccessStream 转 Stream 
  1. Stream stream=WindowsRuntimeStreamExtensions.AsStreamForRead(randomStream.GetInputStreamAt(0));
复制代码

Ibuffer转Stream
  1. Stream stream = WindowsRuntimeBufferExtensions.AsStream(buffer);
复制代码

Stream转Ibuffer  

  1. MemoryStream memoryStream = new MemoryStream();            
  2. if (stream != null)
  3. {
  4.       byte[] bytes = ReadFully(stream);
  5.       if (bytes != null)
  6.       {
  7.            var binaryWriter = new BinaryWriter(memoryStream);
  8.            binaryWriter.Write(bytes);
  9.        }
  10.   } 
  11. IBuffer buffer=WindowsRuntimeBufferExtensions.GetWindowsRuntimeBuffer(memoryStream,0,(int)memoryStream.Length);
复制代码

Ibuffer转byte[] 
  1. byte[] bytes=WindowsRuntimeBufferExtensions.ToArray(buffer,0,(int)buffer.Length);
复制代码

Byte[]转Ibuffer 
  1. WindowsRuntimeBufferExtensions.AsBuffer(bytes,0,bytes.Length);
复制代码

Ibuffer转IrandomAccessStream 

  1. InMemoryRandomAccessStream inStream = new InMemoryRandomAccessStream();
  2. DataWriter datawriter = new DataWriter(inStream.GetOutputStreamAt(0));
  3. datawriter.WriteBuffer(buffer,0,buffer.Length);
  4. await datawriter.StoreAsync();
复制代码

IrandomAccessStream转Ibuffer  

  1. Stream stream=WindowsRuntimeStreamExtensions.AsStreamForRead(randomStream.GetInputStreamAt(0));
  2. MemoryStream memoryStream = new MemoryStream();            
  3. if (stream != null)
  4. {
  5.     byte[] bytes = ReadFully(stream);
  6.     if (bytes != null)
  7.     {
  8.         var binaryWriter = new BinaryWriter(memoryStream);
  9.         binaryWriter.Write(bytes);
  10.     }

  11. IBuffer buffer=WindowsRuntimeBufferExtensions.GetWindowsRuntimeBuffer(memoryStream,0,(int)memoryStream.Length);
复制代码

Stream转byte[]
  1. public static byte[] ConvertStreamTobyte(Stream input)
  2. {
  3. byte[] buffer = new byte[16 * 1024];
  4. using (MemoryStream ms = new MemoryStream())
  5.   {
  6.    int read;
  7.    while ((read = input.Read(buffer, 0, buffer.Length)) > 0)
  8.     {
  9.      ms.Write(buffer, 0, read);
  10.     }
  11.    return ms.ToArray();
  12.   }
  13. }
复制代码

byte[]转Stream

  1. public Stream BytesToStream(byte[] bytes)
  2.         {
  3.             Stream stream = new MemoryStream(bytes);
  4.             return stream;
  5.         }
复制代码

Stream转MemoryStream

  1. public static MemoryStream ConvertStreamToMemoryStream(Stream stream)
  2.         { 
  3.             MemoryStream memoryStream = new MemoryStream();
  4.             if (stream != null)
  5.             {
  6.                 byte[] buffer = ReadFully(stream);
  7.                 if (buffer != null)
  8.                 {
  9.                     var binaryWriter = new BinaryWriter(memoryStream);
  10.                     binaryWriter.Write(buffer);
  11.                 } 
  12.             } 
  13.             return memoryStream;
  14.         }
复制代码

IrandomAccessStream转byte[]

  1. Stream stream = WindowsRuntimeStreamExtensions.AsStreamForRead(randomStream.GetInputStreamAt(0));
  2. MemoryStream ms = new MemoryStream();
  3. await stream.CopyToAsync(ms);
  4. byte[] bytes = ms.ToArray();
复制代码
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值