ホームページ >よくある問題 >テキスト ファイルとバイナリ ファイルの違いは何ですか?

テキスト ファイルとバイナリ ファイルの違いは何ですか?

coldplay.xixi
coldplay.xixiオリジナル
2020-11-20 09:42:2924237ブラウズ

テキスト ファイルとバイナリ ファイルの違い: 1. テキスト ファイルは文字エンコーディングに基づいたファイルです。一般的なエンコーディングには、ASCII エンコーディング、UNICODE エンコーディングなどが含まれます。2. バイナリ ファイルは値エンコーディングに基づいたファイルです

テキスト ファイルとバイナリ ファイルの違いは何ですか?

テキスト ファイルとバイナリ ファイルの違い:

1. テキスト ファイルとバイナリ ファイルの定義

コンピューターのストレージは物理的にバイナリであることは誰もが知っています。そのため、テキスト ファイルとバイナリ ファイルの違いは物理的なものではなく、論理的なものです。この 2 つはコーディング レベルでのみ異なります。

簡単に言えば、テキスト ファイルは文字エンコーディングに基づいたファイルであり、一般的なエンコーディングには ASCII エンコーディング、UNICODE エンコーディングなどが含まれます。バイナリ ファイルは値のエンコードに基づいたファイルで、特定のアプリケーションに応じて特定の値が何を意味するかを指定できます (このようなプロセスはカスタム エンコードとみなすことができます)。

上記のことから、テキスト ファイルは基本的に固定長エンコーディングであることがわかります。文字に基づいて、各文字は特定のエンコーディングで固定されています。ASCII コードは 8 ビット エンコーディングであり、一般的に UNICODE が占めます。 16 ビット、ビット。バイナリ ファイルは値エンコードであるため、可変長エンコードとみなすことができます。値を何ビットで表すかは完全にユーザー次第です。 BMP ファイルについてはよくご存知だと思います。例として見てみましょう。そのヘッダーは、比較的固定長のファイル ヘッダー情報です。最初の 2 バイトは、ファイルが BMP 形式であることを記録するために使用され、次の 8 バイトは、ファイルが BMP 形式であることを記録するために使用されます。ファイルの長さを記録し、次の 4 バイトは bmp ファイル ヘッダーの長さを記録するために使用されます。 。 。ご覧のとおり、エンコードは値 (2、4、8 バイト長の値を含む可変長) に基づいているため、BMP はバイナリ ファイルです。

2. テキスト ファイルとバイナリ ファイルへのアクセス

テキスト ツールでファイルを開くプロセスは何ですか?メモ帳を例にとると、最初にファイルに物理的に対応するバイナリ ビット ストリームを読み取り (前述したように、ストレージはバイナリです)、次に選択したデコード方法に従ってこのストリームを解釈し、解釈結果を表示します。一般的に、選択したデコード方法は ASCII コード形式 (ASCII コードの 1 文字は 8 ビット) で、次にこのファイル ストリームを 8 ビット 8 ビットで解釈します。たとえば、このようなファイル ストリーム「01000000_01000001_01000010_01000011」(読みやすくするために手動で追加したアンダースコア「_」)の場合、最初の 8 ビット「01000000」が ASCII コードに従ってデコードされると、対応する文字は同様に「A」になります。他の 3 つの 8 ビットはそれぞれ「BCD」としてデコードできます。つまり、このファイル ストリームは「ABCD」として解釈でき、メモ帳はこの「ABCD」を画面に表示します。

実際、世界中の何かが他のものと通信したい場合、確立されたプロトコルと確立されたエンコーディングが存在します。人は言葉でコミュニケーションをとり、「母」という字は自分を産んでくれた人を表す、という規範が確立されています。しかし、日本語の「お母さん」という文字は、あなたが産んだ人を意味する可能性があることに気づきました。発生しますが正常です。メモ帳でバイナリ ファイルを開く場合は、上記の状況と似ています。メモ帳はどのファイルを開いても、定められた文字エンコーディング(ASCIIコードなど)に従って動作するため、バイナリファイルを開いた場合に文字化けが発生するのは避けられず、デコードとデコードは対応していません。たとえば、ファイル ストリーム '00000000_00000000_00000000_00000001' は、バイナリ ファイル内の 4 バイトの整数 int1 に対応する場合があり、メモ帳で解釈すると、4 つの制御文字「NULL_NULL_NULL_SOH」になります。

テキスト ファイルの保存と読み取りは、基本的には逆のプロセスであるため、再度説明しません。バイナリ ファイルへのアクセスは、エンコード/デコード方法が異なることを除いて、テキスト ファイルへのアクセスと明らかに似ていますが、これについては再度説明しません。

3. テキスト ファイルとバイナリ ファイルの長所と短所

テキスト ファイルとバイナリ ファイルの違いはエンコードのみであるため、長所と短所はエンコードにあります。コーディングブックを探すと、メリットとデメリットがより明確になります。一般に、テキスト ファイルのエンコードは固定長の文字に基づいており、デコードが容易であると考えられています。一方、バイナリ ファイルのエンコードは可変長であるため、柔軟性があり、ストレージ使用率が高く、デコードがより困難です (さまざまなバイナリ ファイル形式異なるデコード方法があります). code メソッド)。スペースの使用率について考えてみてください。テキスト ファイルの意味は少なくとも 1 文字ですが、バイナリ ファイルでは 1 ビットを使用して意味を表すこともできます (ビット操作)。

また、多くの書籍では、テキスト ファイルは読みやすく、ストレージには変換時間が必要 (読み取りと書き込みにはエンコードとデコードが必要)、一方、バイナリ ファイルは読みやすさが低く、ストレージには変換時間は不要 (読み取りと書き込みにはエンコードとデコードは必要ありません) であると考えられています。デコードします。値を直接書き込みます)。ここでの可読性はソフトウェア ユーザーの観点からのものであり、一般的なメモ帳ツールを使用してほとんどすべてのテキスト ファイルを参照できるため、テキスト ファイルは可読であると言われますが、特定のバイナリ ファイルの読み書きには特定のファイル デコーダが必要です。バイナリファイルは可読性が悪く、例えばBMPファイルを読み取るには画像読み取りソフトを使用する必要があります。 Windows などの一部のオペレーティング システムではキャリッジ リターンとライン フィード ('\n' を '\r\n' に置き換える) を変換する必要があるため、ここでのストレージ変換時間はプログラミングの観点から考慮する必要があります。そのため、ファイルの読み取りと書き込みの実行時に、オペレーティング システムは、現在の文字が '\n' であるか '\r\n' であるかを文字ごとに確認する必要があります)。Linux オペレーティング システムでは、2 つの異なるオペレーティング システムで実行している場合、このストレージ変換はもちろん必要ありません。ファイルを共有する場合 (テキスト ファイルを共有する Linux システムと Windows システムなど)、変換が再度発生する可能性があります。この変換方法については、次の記事「Linux テキスト ファイルと Windows テキスト ファイルの変換」で説明します ^_^

4. C テキストの読み書きとバイナリ読み取りと書き込み

C テキストの読み取りと書き込み、およびバイナリの読み取りと書き込みは、特定のオペレーティング システムに関連するプログラミング レベルの問題であるため、「テキスト モードで読み取りおよび書き込みされるファイルはテキスト ファイルでなければなりません」 . 使用 バイナリで読み書きされるファイルはバイナリファイルでなければならないという考え方は間違っています。次の説明では、オペレーティング システムの種類を明示的に示していませんが、すべて Windows について言及しています。 C のテキストの読み書きとバイナリの読み書きの違いは、復帰と改行の処理にのみ反映されます。テキスト モードで書き込む場合、'\n' (0AH 改行文字) が見つかるたびに、それを '\r\n' (0D0AH、キャリッジ リターンと改行文字) に置き換えてファイルに書き込みます。テキストを読み取るとき、「\r\n」に遭遇するたびに、それを「\n」に変更して読み取りバッファに送信します。テキスト モードでは '\n'--'\r\n' 間の変換があるため、変換には時間がかかります。バイナリの読み取りおよび書き込みの場合、変換は行われず、書き込みバッファ内のデータがファイルに直接書き込まれます。

一般的に、プログラミングの観点から見ると、C でのテキストまたはバイナリの読み取りと書き込みは、読み取りと書き込みの際にキャリッジ リターンとライン フィードの変換が行われることを除いて、バッファとファイル内のバイナリ ストリームの間の相互作用です。文章。したがって、書き込みバッファに改行文字「\n」(0AH)が存在しない場合、テキスト書き込みとバイナリ書き込みの結果は同じになります。また、ファイル内に「\r\n」(0DH0AH)が存在しない場合も同様です。 、テキスト読み取りの結果はバイナリ書き込みの結果と同じです、バイナリ読み取りの結果は同じです。

以上がテキスト ファイルとバイナリ ファイルの違いは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。