web-dev-qa-db-ja.com

バイト配列を任意の型に変換する方法

わかりました。バイト配列をintstringStreamなどに変換する方法を尋ねる人からの質問があります。個人的に満足できる答えは見つかりませんでした。

そのため、バイト配列を変換したいいくつかの型があります。

UnityEngine.Fontttfデータを取り込むことができます。

UnityEngine.Testure2Dは、.png.jpgなどの画像ファイルからデータを取り込むことができます...

バイト配列をどのようにStringUnityEngine.Testure2D,UnityEngine.FontBitmapなどに変換しますか...

バイト配列に入力するデータは、バイト配列を変換するタイプによって管理できるデータを持つファイルタイプのものである必要がありますか?

これは現在可能ですか?

任意の助けをいただければ幸いです。

15
user4740550

プリミティブ型は、バイト配列として定義された表現を持っているため、簡単です。他のオブジェクトは、ファイルハンドル、他のオブジェクトへの参照など、永続化できないものが含まれている可能性があるためではありません。

tryBinaryFormatter を使用して、オブジェクトをバイト配列に永続化できます。

public byte[] ToByteArray<T>(T obj)
{
    if(obj == null)
        return null;
    BinaryFormatter bf = new BinaryFormatter();
    using(MemoryStream ms = new MemoryStream())
    {
        bf.Serialize(ms, obj);
        return ms.ToArray();
    }
}

public T FromByteArray<T>(byte[] data)
{
    if(data == null)
         return default(T);
    BinaryFormatter bf = new BinaryFormatter();
    using(MemoryStream ms = new MemoryStream(data))
    {
        object obj = bf.Deserialize(ms);
        return (T)obj;
    }
}

ただし、すべてのタイプがシリアル化できるわけではありません。たとえば、データベースへの接続を「保存」する方法はありません。create接続(接続文字列など)に使用される情報は保存できますが、実際の接続オブジェクトは保存できません。

32
D Stanley