Windows 8各种流之间的转换

//String 转 Buffer
private IBuffer GetBufferFromString(String str)
{
using (InMemoryRandomAccessStream memoryStream = new InMemoryRandomAccessStream())
{
using (DataWriter dataWriter = new DataWriter(memoryStream))
{
dataWriter.WriteString(str);
return dataWriter.DetachBuffer();
}
}
}

//Buffer 转 String
private String GetStringFromBuffer(IBuffer buffer)
{
using (DataReader dataReader = DataReader.FromBuffer(buffer))
{
return dataReader.ReadString(buffer.Length);
}
}

//Stream 转 IInputStream 

IInputStream inputStream = stream.AsInputStream();

//IInputStream 转 Stream

stream  = inputStream.AsStreamForRead();

//Stream 转 IOutputStream 

IOutputStream outputStream = stream.AsOutputStream();

//IOutputStream 转 Stream

stream  = outputStream.AsStreamForRead();

//Stream  转  IRandomAccessStream

IBuffer buffer = null;

var inputstream = stream.AsInputStream();

using (var dataReader = new DataReader(inputstream))

{

await dataReader.LoadAsync((uint)stream.Length);

buffer = dataReader.DetachBuffer();

}

var iRandomAccessStream = new InMemoryRandomAccessStream();

await iRandomAccessStream.WriteAsync(buffer);

// IRandomAccessStream 转 Stream

stream = iRandomAccessStream.AsStream();  

//Ibuffer转byte[]

byte[] bytes = WindowsRuntimeBufferExtensions.ToArray(buffer,0,(int)buffer.Length);

//Byte[]转Ibuffer

IBuffer buffer = WindowsRuntimeBufferExtensions.AsBuffer(bytes,0,bytes.Length);

//Ibuffer转Stream

Stream stream = WindowsRuntimeBufferExtensions.AsStream(buffer);

//Stream转Ibuffer

MemoryStream memoryStream = new MemoryStream();  

if (stream != null)

{

byte[] bytes = ReadFully(stream);

if (bytes != null)

{

var binaryWriter = new BinaryWriter(memoryStream);

binaryWriter.Write(bytes);

}

} 

IBuffer buffer=WindowsRuntimeBufferExtensions.GetWindowsRuntimeBuffer(memoryStream,0,(int)memoryStream.Length);

//Ibuffer转byte[]

byte[] bytes=WindowsRuntimeBufferExtensions.ToArray(buffer,0,(int)buffer.Length);

//Byte[]转Ibuffer

WindowsRuntimeBufferExtensions.AsBuffer(bytes,0,bytes.Length);

//Ibuffer转IrandomAccessStream

InMemoryRandomAccessStream inStream = new InMemoryRandomAccessStream();

DataWriter datawriter = new DataWriter(inStream.GetOutputStreamAt(0));

datawriter.WriteBuffer(buffer,0,buffer.Length);

await datawriter.StoreAsync();

//IrandomAccessStream转Ibuffer

Stream stream=WindowsRuntimeStreamExtensions.AsStreamForRead(randomStream.GetInputStreamAt(0));

MemoryStream memoryStream = new MemoryStream();  

if (stream != null)

{

byte[] bytes = await ConvertStreamTobyte(stream);

if (bytes != null)

{

var binaryWriter = new BinaryWriter(memoryStream);

binaryWriter.Write(bytes);

}

} 

IBuffer buffer=WindowsRuntimeBufferExtensions.GetWindowsRuntimeBuffer(memoryStream,0,(int)memoryStream.Length);

//Stream转byte[]

public async Task<byte[]> ConvertStreamTobyte(Stream stream)

{

MemoryStream ms = new MemoryStream();

await stream.CopyToAsync(ms);

return ms.ToArray();

}

//Byte转Stream

public Stream BytesToStream(byte[] bytes)

{

Stream stream = new MemoryStream(bytes);

return stream;

}

//Byte[] -> BitmapImage

public async Task<BitmapImage> ByteArrayToImageAsync(byte[] pixeByte)

{

using (InMemoryRandomAccessStream stream = new InMemoryRandomAccessStream())

{

stream.Seek(0);

IBuffer buffer = WindowsRuntimeBufferExtensions.AsBuffer(pixeByte, 0, pixeByte.Length);

await stream.WriteAsync(buffer);

BitmapImage image = new BitmapImage();

image.SetSource(stream);

return image;

}

}
原文地址:https://www.cnblogs.com/wzwyc/p/6293417.html