2008年5月31日土曜日

バイナリファイルの長所と短所

プログラミングでファイルについて学ぶとき、最初に学ぶのはテキストファイルだろう。しかし、ファイルはテキストファイルばかりではない。バイナリファイルもある。多くのCの入門書がテキストファイルしか扱わずバイナリファイルを説明していない。また、バイナリファイルについて説明する場合でも、その長所と短所を正確に伝えていない。
よくある説明は以下のようなものだ。いわく、テキストファイルでは数字を文字で表現するため桁に応じて長くなるのに対して、バイナリファイルでは固定長でよい。つまり、バイナリファイルの方が容量効率がよいという説明だ。
しかし、これは適切ではない。整数ではバイナリファイルの方が効率が良くなる傾向はある。しかし、文字列ではテキストファイルの方が効率がよい。なぜなら、テキストは可変長で、多くの場合、配列全体を使うことはないからだ。つまり、バイナリファイルでは未使用領域が多くなり、容量効率が悪くなることが多い。
もちろんデータ構造を工夫すれば容量効率を高めることができる。しかし、バイナリファイルを使い始めたばかりの初心者に、そこまで要求するのは酷というものだ。
バイナリファイルの長所は容量効率ではない。それでは何かと言えば、読み書きが速いということだ。テキストファイルは数を文字に変換する必要がある。文字列は基本的に変換する必要がないが、厳密には文字コードや改行コードなどを変換することがある。つまり、プロセス内部のデータ形式をファイルのデータ形式に変換する作業を伴う。その分、わずかに遅くなる。それに対してバイナリファイルは内部形式をそのままファイルに書き込む。そのため若干速い。
それゆえバイナリファイルにはデータ形式が機種依存になる問題点がある。例えば、エンディアンなどの問題だ。ある機種で出力したデータを別の機種で入力できないことがある。バイナリファイルを使う時には機種依存性を考慮する必要がある。
最近ではCPUの性能が向上し、テキスト処理のためのわずかなオーバーヘッドは無視できるようになった。そのためバイナリファイルよりテキストファイルの方が便利になった。OfficeがXMLを使うのも、そのような流れの中で自然なことだ。なお、Officeの文書はバイナリであるが、これはXMLをzipで圧縮するためだ。圧縮すればバイナリとなるが、圧縮しなければ必ずしもバイナリの方が容量効率がよいわけではない。

0 件のコメント: