「binary」の意味や使い方 わかりやすく解説 Weblio辞書 (original) (raw)

ウィキペディアFavicon16進ダンプ。先頭列は行番号、「*」は同じ内容の行の反復を示している。1行あたり16バイトであり、318バイトのデータである。

バイナリファイル(英:binary file)とは、テキストファイルではないコンピュータファイルである。

情報技術においては、コンピュータが直接的に処理するために2進数で表現されるデータのことを指すが、一般的にテキスト形式以外のデータ形式を指す言葉として用いられる。バイナリデータバイナリコードバイナリ形式などとも呼ばれる。対義語はテキストファイル。

日本においては、単に「バイナリ」と略称で呼ばれることも多い。この場合、文脈によっては、ファイル形式ではなく、算術的な用法の二進法のことを指すことがあるため注意が必要である。

概要

現代のコンピュータは、扱う情報を全てビット(二進数)形式で管理している。つまり、厳密にはコンピュータ上で扱うファイルは、テキストファイルを含め、全て「バイナリファイル」である。しかし、データの種類を区別する便宜上、バイナリファイルとテキストファイルとは対比して用いられる。

バイナリファイルは、コンピュータが直接的に処理することを前提に設計されている。バイナリエディタを用いて、ファイルの内容を16進数などで表示させることはできるが、その内容を人間がただちに理解することはできない。

一方、テキストファイルは、人間が直接内容を読むことを前提に設計されている。このフォーマットでは、二進数で構成されたデータは文字コードに基づいてエンコードデコードされ、人間が読める文字列として表示される。この処理はテキストエディタなどでリアルタイムで行われ、人間は直接内容を読んで理解することができ、更にそのまま編集を加えることができる。

このテキストファイルの使用は非常に便利かつ特徴的であったため、その他のファイルと区別するための言葉として「バイナリファイル」という名称が使われるようになった。そういう意味では言葉としての「バイナリファイル」は一種のレトロニムと言える。

バイナリの例

たとえば画像ファイルや音声ファイル圧縮されたファイルなどはバイナリが使われることが多い。テキストはバイナリと比べてデータ量が増大しやすく、また誤差をもともと含む浮動小数点数を10進数の文字列として変換すると正確に表現できず、ファイルを読み込む際に完全に復元できないことがあるからである。例えば、PNM画像形式におけるP1/P2/P3のようにASCIIテキストが使われる場合もあるが、バイナリのP4/P5/P6と比べてデータ量が増えてしまう。バイナリであれば8ビット(1オクテット、≒1バイト)で済むような0から255までの範囲のデータであっても、テキストであれば10進数表記の可変長文字列として表現する場合は最大3文字必要となり、さらに隣接データとの境界を示す区切り文字も含めると4文字必要となる。16進数表記の固定長文字列として表現する場合でも2文字必要となるので、仮に8ビット単位でエンコーディングしても16ビット(2オクテット、≒2バイト)必要になってしまう。

バイナリファイルの中にはファイルの先頭にメタ情報(ヘッダ)を持っているものがある。たとえばGIFファイルは複数の画像を持つことができ、ファイルの先頭でそれぞれの画像を区別する情報が記述されている。そのようなメタ情報を持たないファイルはフラットバイナリファイルと呼ばれる。コンピュータプログラム関係では、テキストであるソースコードとの対比からコンパイルされたコードのファイル等[注釈 1]を指してバイナリと呼ばれることがしばしばある。プロプライエタリのソフトウェアはバイナリの形態で提供されるが、特に商用ソフトウェアは他者による解析(リバースエンジニアリング)や改変・改竄・クラッキングを防ぐために、リソースファイルやメディアファイル、ライセンスファイルなどの一部がさらに難読化や暗号化を施した状態で提供されることも多い。

バイナリ形式でのデータの表現方法はさまざまなものがある。例えば、数値であれば0から9までの数をパターン化して記録するBCD、ゾーンビットと実際の数値、正の数か負の数かを記録する符号ビットからなるアンパック10進数(ゾーン10進数)や、実際の数値と符号ビットだけからなるパック10進数などがある。文字列の扱いとしては、ヌル文字(C系言語のリテラル表記では'\0')で終端する方法(ヌル終端文字列、ゼロ終端文字列)や、長さ[注釈 2]を別に保持する、といった方式がある。前者では、'\0' を含むようなバイナリを「文字列」として扱うことができない。

C言語におけるファイルストリームのように、処理系によってはテキストモードとバイナリモードで改行文字の扱いが異なる場合もある[1]C++のストリームはデフォルトでテキストモードだが、バイナリモードを指定することもできる[2]

注意点

バイナリフォーマットでは、エンディアンなどに互換性移植性の上で注意が必要であり、それを避けてテキスト形式で記録することも少なくない(UNIX哲学も参照)。Java.NETのような標準化された環境に代表されるように、一般的には符号付き整数の内部表現に2の補数を採用し、またIEEE 754準拠の浮動小数点数を採用することが規定されているシステムやプラットフォームが多いものの、そうでない環境とのデータ交換にはバイナリは不向きである。なお浮動小数点数の誤差やループした構造の表現[_要説明_]など、テキスト形式にも注意が必要な点は多い。

2バイト以上の数値型や、固定長の配列によるヌル終端文字列などをメンバーに持つ構造体をバイナリとしてそのままシリアライズすることもあるが、処理系やCPUアーキテクチャによってデフォルトのパディングが異なるので、メモリレイアウトを規定するアライメントをソースコード上で明示的に指定する必要がある。

脚注

注釈

  1. ^ オブジェクトファイル実行ファイルなど。またそのような機械語(ネイティブバイナリ)に限らず、WebAssemblyJavaなどのバイトコード類なども含む。
  2. ^ オクテット数、あるいは文字(符号点)の個数。

出典

  1. ^ FIO14-C. ファイルストリームにおけるテキストモードとバイナリモードの違いを理解する
  2. ^ ios_base::openmode - cpprefjp C++日本語リファレンス

関連項目

ファイル (コンピュータ)
形式 バイナリ / テキストファイル ファイルフォーマット データフォーマットの一覧 マジックナンバー シグネチャ一覧(英語版オープンフォーマット コンテナフォーマット サイドカーファイル(英語版スパースファイル システムファイル(英語版) 一時ファイル(英語版) ゼロバイトファイル(英語版
属性 ファイル名 8.3形式 長いファイル名 ファイル名修飾(英語版拡張子 ファイルフォーマット一覧 ファイル属性(英語版拡張ファイル属性 ファイルサイズ 隠しファイル
組織 ディレクトリ 一時フォルダ(英語版) ディレクトリ構造(英語版) ファイルシーケンス(英語版ファイルシステム ファイルシステム階層標準 パス (コンピュータ)英語版
操作 Open(英語版) Close(英語版) Read(英語版) Write(英語版
リンク ファイル記述子 ハードリンク ソフトリンク ショートカット エイリアス(英語版) シャドウ(英語版
管理 バックアップ ファイルコンペア データ圧縮 ファイルマネージャ ファイルマネージャ一覧(英語版ファイルパーミッション ファイル転送 ファイル共有 ファイル同期 ファイル検証(英語版
カテゴリ