酢ろぐ!

カレーが嫌いなスマートフォンアプリプログラマのブログ。

WindowsストアアプリでWindows.Storage.Streams.IRandomAccessStream型のストリームとSystem.IO.Stream型のストリームとを相互に変換する

まとめはこっちに書いています。

本記事ではWindowsストアアプリでのSystem.IO.Stream型からWindows.Storage.Streams.IRandomAccessStream型への変換。または逆のWindows.Storage.Streams.IRandomAccessStream型からSystem.IO.Stream型へ変換する方法を紹介します。

これらの型の変換は、既存のライブラリからWinRT APIにデータを渡す場合などに使用することでしょう。よく利用されることが想定されているのでWindowsストアアプリでは標準でSystem.IO.WindowsRuntimeStreamExtensionsクラスが提供されています。

このWindowsRuntimeStreamExtensionsクラスは、Streamを扱う上での変換を非常に簡単におこなえるようにした拡張メソッド集とも言えるクラスです。

Stream to IRandomAccessStream

System.IO.Stream型からWindows.Storage.Streams.IRandomAccessStream型の変換をおこないます。

System.IO.Stream型のストリームからWindows.Storage.Streams.IRandomAccessStream型のストリームへ変換するには、AsRandomAccessStreamメソッドを使います。

// using System.IO;
// using Windows.Storage.Streams;
// using System.IO.WindowsRuntimeStreamExtensions;

Stream stream = GetXXXXX();
var ras = WindowsRuntimeStreamExtensions.AsRandomAccessStream(stream);

IRandomAccessStream to Stream

Windows.Storage.Streams.IRandomAccessStream型からSystem.IO.Stream型の変換です。

IRandomAccessStreamクラスのReadBytesAsyncメソッドを使ってbyte型配列bytesにデータを読み込み、bytesの内容をMemoryStreamストリームに書き出します。

// using System.IO;
// using Windows.Storage.Streams;
// using System.IO.WindowsRuntimeStreamExtensions;

IRandomAccessStream stream = GetXXXXX();

var bytes = await stream.ReadBytesAsync();
var memStream = new MemoryStream())
memStream.Write(bytes, 0, bytes.Length);

関連記事

Windowsストアアプリ(WinRT API)を使ってアプリ開発する際に逆引きとしてお使いください。

blog.ch3cooh.jp