プログラマはいつ.bin
ファイルを使用する必要がありますか? (実用例)。
異なるデータ型を 1 つのファイルに保存することは一般的 (または受け入れられている) ですか?
ファイル (複数のデータ型を含む) 内のデータを反復処理する場合、プログラムはすべてのデータ型の正確な長さを認識している必要がありますが、これには限界があります。
プログラマはいつ.bin
ファイルを使用する必要がありますか? (実用例)。
異なるデータ型を 1 つのファイルに保存することは一般的 (または受け入れられている) ですか?
ファイル (複数のデータ型を含む) 内のデータを反復処理する場合、プログラムはすべてのデータ型の正確な長さを認識している必要がありますが、これには限界があります。
理想化された汎用アプリケーション データの場合、テキスト ファイルが好まれることがよくあります。これは、テキスト ファイルがユーザーに透明性を提供し、(たとえば) データを別のアプリケーションに移動してロックインを回避することを容易にする可能性があるためです。
バイナリ ファイルは主に、パフォーマンスとコンパクトさの理由で使用されます。テキストとしてエンコードすると、これらの両方の部門 (現在では、おそらくほとんどのサイズ) で無視できないオーバーヘッドが発生し、場合によっては法外になります。
組み込み開発者が「.bin」ファイルを見るとき、それは一般に、プロセッサのファームウェアとしてプログラミングすることを目的とした、ELFなどのフラットバージョンであると思います。たとえば、Linuxカーネルをフラッシュに入れます(ブートローダーによって異なります)。
バイナリファイルを使用するかどうかの一般的な慣習として、多くの理由でそれが行われていることがわかります。テキストには解析が必要であり、それはかなりのオーバーヘッドになる可能性があります。ただし、ユーザーが使用できるようにすることを目的としている場合、バイナリは不適切な形式であり、テキストは本当に輝いています。
バイナリが最適なのはパフォーマンスです。それをメモリにマッピングしたり、構造を利用してアクセスを高速化したりすることができます。場合によっては、2つのバイナリファイルがあります。1つはデータを含み、もう1つはメタデータを含み、データの塊を検索するのに役立ちます。たとえば、Gitはこれを行います。インデックス形式、パック形式、およびオブジェクト形式を定義します。これらはすべて連携してプロジェクトの履歴を保存しますが、簡単にアクセスできますが、コンパクトな方法です。
バイナリ ファイルは、読み書きのコンパクトさや速度が必要な場合に使用されます。
これらの 2 つの要件は、小さなファイルの読み取りと書き込みが高速であるという明らかな方法で密接に関連していますが、バイナリ I/O が高速であることができるもう 1 つの重要な理由があります。レコードが固定長の場合、ファイル内のレコードへのランダム アクセスが可能になります。はるかに簡単かつ迅速に。
例として、ファイル全体をメモリにロードせずに (ファイルが大きすぎてロードできないため)、ファイルのレコード内でバイナリ検索を実行したいとします (もちろん、ソートする必要があります)。 RAMに収まらない)。これは、2 つのレコード間の「中間点」のオフセットを計算する方法を知っている場合にのみ、効率的に実行できます。レコードの開始点または終了点を見つけるためだけに、ファイルの任意の大きな部分を解析する必要はありません。
(コメントで述べたように、ランダム アクセスはテキスト ファイルでも実現できます。通常は、実装が難しく、処理が遅くなります。)