すべてがXMLを使用できるのに、なぜすべてがバイナリファイルを使用するのですか?
9 に答える
もちろん、パフォーマンスのおかげで、ツリー構造を定義する必要がある場合はXMLが適していますが、すべての種類のデータがそれに適合するとは限りません。3DモデルをXMLファイル内に保存しますか?または画像?
XMLは、テキストデータの処理に適しています。画像、音声、圧縮ファイルなどの効果的なバイナリデータについてはどうでしょうか。
解析するのは本当に冗長で重いので、パフォーマンスが重要な場合(たとえば、ゲームのネットコードについて考えてみてください)には使用したくありません。
たとえば、ベクトルやポイントの構造を含むXMLファイルを読み取る必要がある場合は、自分で撮影します。
代わりにパーサーを使用して、次のようなコンテンツをメモリにダンプします。
fread(&myBuf, sizeof(vector_struct), 10, in);
私は愚かだと感じるでしょう。
両方の長所を活用してください。www.codesynthesis.com XSDのように、バイナリとXMLの両方にシリアル化/逆シリアル化するツールでXSDバインディングを使用します。
XMLを見たことがありますか?より大きなハードディスクを販売することは、ハードウェアメーカーによる陰湿な計画のようです:-)
ただし、ユーモアはさておき、次の場合はバイナリファイルを使用することを選択します。
- 情報を外部のシステムで利用できるようにしたり、他のプラットフォームに移植したりすることについてはあまり心配していませんでした。
- 私はそれを最高速度で読み書きしたかった(XMLを解析/生成する必要はありません)。
- 人間が読める形式や簡単に変換できる形式は必要ありませんでした。
- XMLが意味をなさない(埋め込まれたC)システム、またはXML処理ライブラリがすぐに利用できないシステムで作業していました。
多くの場合、XMLが適切な選択ですが、バイナリ形式が必要な場合や、少なくともそれを考慮する必要がある場合があります。
- ランダムアクセスが必要な場合(そしてファイルをメモリにロードできない場合-データベースなど)
- ファイルサイズが問題になる場合(画像、映画など)
- データが本質的にバイナリである場合(画像、音声など)
- パフォーマンスが懸念される場合(上記のすべて)
バイナリを使用する理由は次のとおりです。
- XMLは解析が困難です(利用可能なほとんどすべての言語に対応する優れたXMLライブラリがあります)
- バイナリは、ユーザーが改ざんされるのを防ぎます(そうではなく、それはそれをより困難にするだけです)
これを読んでください:ソフトウェアのジョエル:基本に戻る。はい、それはたくさんのテキストです。はい、それはあなたの質問に関連していないようですが、いいえ、これはあなたの質問に対する悪い答えではありません-私がジョエルだった場合、私はここにその投稿全体を引用し、それについて何億もの担当者を主張します。
これは非常に輝かしい例です。バイナリ形式は常に整列され、すべてのx..x+yビットは1つのデータグループを表します。他のグループへの移動は、元の開始点とグループのインデックスを取得し、2つの値にその値(x * n ..(x + y)* n)を掛けて、そのグループに関連するすべてのデータを取得するのと同じくらい簡単です。正確には、XMLでこれをどのように行いますか?
XMLは解析するのが大変です。人々が書きやすく、プログラムが読みやすいフォーマットとして、それは実際には悪いものの1つです。
バイナリファイルには、解析の多くをスキップして、ファイルの一部を直接メモリダンプとして扱うことができるという利点もあります(ただし、気になる場合は慎重に行う必要があります)。
- 小さい->送信する方が良い。
- アクセス方法によっては、解析が速くなります。
- 読みにくい(XMLファイルよりもバイナリファイルをハッキングするのが難しい)
そしてもう一つの理由。自由に追加してください。
すべてのタイプのデータをxmlで表すことができるわけではありません。また、XMLではなくバイナリで値を格納するために多くのスペースを節約します。データをXMLパーサーで解析する場合は、XMLで保存する必要があります。そうしないと、スペースが無駄になります。
XMLを解析するため:
- 時間がかかります
- 多くの計算が必要です
したがって、パフォーマンスにはバイナリファイルを使用する方が適しています。
そして、また:
- XMLはかなり冗長な形式です。これらすべてのタグを考えてみてください。これにより、ファイルが非常に大きくなります。
- データをテキストとして表現することは必ずしも簡単/可能であるとは限りません