C# で string と MemoryStream を 変換 する 方法

0 件のコメント

Web通信やファイル操作を行う際、文字列(String) と メモリ配列(MemoryStream) を交換が発生します。 今回はそれぞれを相互へんかんする方法をまとめました。

まぁ、実際には「まとめ」に記載しているサンプルコードをコピペして利用すればラクだと思います。

目次

String → MemoryStream 変換

using System.IO;
using System.Text;

class Class1
{
    public MemoryStream GetMemoryStream(string text)
    {
        return new MemoryStream(Encoding.UTF8.GetBytes(text));
    }
}

MemoryStream → String 変換

using System.IO;
using System.Text;

class Class1
{
    public string GetString(MemoryStream stream)
    {
        return Encoding.UTF8.GetString(stream.ToArray());
    }
}

まとめ

文字列⇔メモリストリームの相互変換は拡張メソッドに定義しました。 以下のファイルをプロジェクトに組み込めば簡単に相互変換を利用できます。

メモリストリーム→文字列の変換メソッド名が ToString でデフォルトと被っている点がいまいちですが… いい名前が思いつかずこのままにしています。 利用する際は Encoding の指定をお忘れなく…。

ConverterExtensions.cs

using System.IO;
using System.Text;

namespace Sample
{
    /// <summary>
    /// 文字列とメモリストリームの相互変換拡張メソッドを提供します。
    /// </summary>
    public static class ConverterExtensions
    {
        /// <summary>
        /// 文字エンコーディングを指定して現在の文字列を表すメモリストリームを取得します。
        /// </summary>
        /// <param name="text">現在の文字列</param>
        /// <param name="encoding">文字エンコーディング</param>
        /// <returns>メモリストリーム</returns>
        public static MemoryStream ToMemoryStream(this string text, Encoding encoding)
        {
            return new MemoryStream(encoding.GetBytes(text));
        }

        /// <summary>
        /// 文字エンコーディングを指定して現在のメモリストリームを表す文字列を取得します。
        /// </summary>
        /// <param name="stream">メモリストリーム</param>
        /// <param name="encoding">文字エンコーディング</param>
        /// <returns>文字列</returns>
        public static string ToString(this MemoryStream stream, Encoding encoding)
        {
            return encoding.GetString(stream.ToArray());
        }
    }
}

使い方

using Sample;

public class Class1
{
    public void ConvertFromStringToMemoryStream()
    {
        var stream = new MemoryStream();
        var text = stream.ToString(Encoding.UTF8);
    }

    public void ConvertFromMemoryStreamToString()
    {
        var text = "なにか文字列";
        text.ToMemoryStream(Encoding.UTF8);
    }
}