none
オブジェクトをシリアライズした時のフォーマット RRS feed

  • 質問

  • みなさんこんにちは。
    C# にてオブジェクトを BinaryFormatter でシリアル化し、ファイルに保存しているのですが、
    ファイルの中身をなんとなく見ていると連続した00値がかなり多く入っていることに気づきました。
    自分ではそんなに無駄な値をシリアライズしている気は無いのですが、通信にも使うので出来れば少ないほうが望ましいです。
    なんとなく ObservableCollection の後に00値が多いな(空のCollectionの後に100byte程)という気はするのですが、詳細に分析を行いたいところです。
    そこでシリアライズした時のフォーマットに関するドキュメントを探してみたのですが、探し方が悪いのか見つかりません。
    どなたかシリアル後のバイト列がどのようなフォーマットになっているか、これに関するドキュメントをご存じないではないでしょうか?
    プラットフォームは .NET Framework4.0 です。
    よろしくお願いします。

    2011年10月20日 15:42

すべての返信

  • 「空の Collection の後に100byte 程度」という表現がよくわかりませんが、0x00 が並ぶのは、コレクション クラス、string クラスの後だけで、その他は詰まっているのではないでしょうか。そうだとすると、その 0x00 は、コレクション クラスを使っているから、ということになると思います。

    コレクション クラスに新しいアイテムを追加するのは、コストの大きい動作です。そのコストを減らすため、追加ごとに1エリアずつ追加するのではなく、数エリアまとめて追加します。今は使われていない、後に必要が出てきたときのためのエリアが、その 0x00 だと思います。

     

    あと、「ドキュメントを探してみた」のなら、どのように探したかを書いていただけないでしょうか。あなたが探した方法は、他のものを探すときにも応用できるでしょうし、回答者が同じドキュメントを提示することを防ぎます。


    Jitta@わんくま同盟
    2011年10月21日 12:41