私は C で FileIO を学んでいますが、バイナリ ファイルとほとんど混同していませんでした。私の質問は、いつでも簡単に理解できるASCIIまたはその他の形式のファイルを使用できる場合、バイナリファイルを使用することの使用法です。また、どのアプリケーションでバイナリ ファイルがより役立つのでしょうか? これについての助けは本当に感謝しています.Thanks!
6 に答える
すべてのファイルは本質的にバイナリです。ASCII ファイルは、「人間が読める」データと見なすことができるものを含むバイナリ ファイルのサブセットです。純粋なバイナリ ファイルは、読み取り可能な文字のサブセットに制限されません。
アクセス速度
難読化
大きなシリアル化されたファイルを作成せずに、ネイティブ オブジェクトをファイルに書き込む機能。
ASCII は人間にとって簡単に理解できますが、他の多くの目的では、コンピューターが物事をバイナリ形式で格納する方が効率的で簡単です。int
たとえば、整数のシーケンスを保持したい場合、数値の ASCII 表現を書き出して、読み取り中に解析するよりも、コンピュータが を表すのに必要な 4 バイトを読み書きする方が簡単です。
たとえば、プログラムはバイナリです。可能なバイナリ コードは、CPU のプログラム命令である可能性があります。
ASCII は 7 ビット値のみを格納するため、可能な値の半分が無駄になります。
さらに、整数は何として保存されますか?
数値 4294967295 は 4 バイト、32 ビットで格納できますが、数値として ASCII で格納すると、10 文字が必要になります。さらに、32ビットの数値に変換する処理が必要になります。それらのどちらも良いことではありません。
32 ビットの数値は固定サイズであるため、ファイルの 234856 番目の値に到達するのは簡単です。位置 4*234856 を探すだけです。
32 ビットの数値が ASCII として格納されている場合、常に 10 バイトを使用する必要があり、ファイルが 2.5 倍大きくなるか、可変サイズで格納され、ファイル全体を読み取らずに特定の値をシークすることが事実上不可能になります。
編集:
(通常の使用では)人間はファイルに保持されているデータを見ることができないことを付け加えておく価値があります。ファイルの内容を調べる唯一の方法は、データを読み取って使用できるプログラムを実行することです。したがって、人間の利便性は小さな考慮事項です。
一般に、データはプログラムの使用に最も便利な形式で格納され、その形式はプログラムの目的に適合するように設計されています。ASCII は、テキスト編集プログラムが人間が読めるドキュメントを作成し、テキストを表示する簡単な方法をサポートするために設計された形式です。テキストは、英字、数字、および一部の句読点に限定されています。すべての人間の書き言葉をサポートしたい場合、ASCII はあまりにも限定的です。
人間の書き言葉 (およびその他の画像) を表す文字は 100 万以上あると思いますが、すべての人間の言語の文字はまだありません。
UTF-8 は、これまでに書いた文字を複数のバイトとして表現する方法です。UTF-8 は、ASCII の範囲を超える 8 ビット エンコーディングを使用します。
バイナリ ファイルは、コンピュータ プログラムによって直接解釈され、人間によって読み取られることのないデータの真の表現と考えてください。ascii か ascii 形式の数値かに関係なく、プログラムがデータを書き出すのはかなりのオーバーヘッドになります。ほとんどの場合、プログラマーは、配列、構造体、およびスカラーを ASCII 形式でファイルに書き出すためのプロトコルを発明する必要があります。これにより、それらを人間が判読できるようにし、プログラムによって再度読み込んで、バイナリ形式に変換し直すことができます。
データベース テーブルが良い例です。テーブルにテキストまたは数値フィールドがあるかどうかに関係なく、データベース マネージャーはそのデータをバイナリ形式で読み書きします。読み取り可能なデータを表示するために、必要に応じて書き込み、読み取り、および変換を行う方が簡単です。
知覚は、私がこれまで考えたことのない素晴らしい答えを与えてくれました。すべてのデータはバイナリで、ASCII はサブセットです。その答えは、ftp とモードを ascii または binary に設定することを考えさせました。Linux システムに保存されている Windows バイナリを移動する場合は、バイナリとして転送するように ftp に指示します。つまり、ASCII ファイルとして解釈せず、各行の最後に \cr を追加してください。Windows Excel はこれらの非 DOS ファイルを解釈する方法を知っているので、.csv および .txt データをバイナリとして転送することさえあります。
画像、音声ファイル、GIS データ、宇宙船のテレメトリ、または <空白を埋める> を ASCII としてエンコード/デコードしなければならないプログラムを書きたくありません。