Skip to main content

binary

バイナリデータについて

バイナリデータとは

コンピューターが直接理解できる形式のデータ。
コンピューターは内部ですべてのデータをバイナリ(0と1)の組み合わせとして扱う。 そのため、「バイナリデータ」はコンピューターの基本的なデータ形式を指す。

バイナリデータは、文字列や数値だけでなく、画像、音楽、動画、実行可能なプログラム、データベース等、多種多様なデータを含むことができます。これらのデータ形式はすべて、最終的には0と1のバイナリ形式にエンコードされてコンピューターに保存され、処理される。

このようなバイナリデータは、人間が直接理解するのは困難であり、それを解釈し処理できるソフトウェアやハードウェアが必要となります。
たとえば、画像ファイルはバイナリデータとして保存されますが、それを解釈し表示するには画像ビューアソフトウェアが必要となる。

Buffer(バッファー)とバイナリの違い

バッファーとバイナリデータは少々異なりますが、彼らが関わるコンテキストにより、互換性があるかのように見えることがあります。

  • バイナリデータ
    これは、データがビットとバイトで構成されていることを指す一般的な用語。
    バイナリデータは、コンピューターにとってもっとも自然なデータ形式であり、画像、オーディオファイル、実行可能ファイルなど、多くの種類のデータを表すことができる。

  • バッファー
    これは、一時的にデータを保持するためのメモリ領域を指す。
    バッファーは、データがプロセッサやディスクからの出力として生成され、別の場所で使用される前に一時的に保管される場所。
    バッファーは、データの読み書きの速度差を吸収したり、一連のデータをまとめて送信したりするのに役立つ。

Node.jsの Buffer クラスは、バイナリデータを効率的に扱うために提供されています。Bufferオブジェクトは、固定サイズのメモリ領域を表し、バイナリデータの読み書きを可能にします。したがって、Buffer は実際にはバイナリデータを格納するバッファーであり、これが両者がしばしば相互に利用可能である理由です。

画像や動画などのデータをバイナリとして表現する理由

画像や動画などのデータは、その情報量が非常に大きいため、テキスト形式で表現すると非効率的かつ膨大な容量を必要とする。
バイナリデータとして表現することで、この情報を効率的にコンピューターが理解し、扱える形に格納できる。

具体的には、画像や動画の各ピクセルの色情報、透明度、音声の音量や音色等、これらの情報を数値データとして扱い、それを2進数(バイナリ)形式で表現します。このようにすることで、データはそのままコンピューターが理解できる形式となり、また、容量を最小限に抑えられます。それらのデータを扱うためのプロトコルやフォーマット(JPEG、PNG、MP4など)も存在し、これらを利用してデータの保存や送受信が行われます。

一方で、テキストデータ(文字列)も最終的にはバイナリデータとしてコンピューターによって扱われます。しかし、テキストデータは人間が直接読み書きできる形式で表現され、特定の文字コード(UTF-8、ASCII等)にしたがって、各文字が一意のバイナリ表現にマッピングされる。

HTTPとの兼ね合い

なお、HTTP通信においては、バイナリデータも送受信できますが、そのまま送るとデータが壊れる可能性があるため、Base64などのエンコーディングを通じて安全な形式に変換されます。

HTTPプロトコルは、テキストまたはバイナリデータを送受信することが可能。
ただし、送信するデータの種類によっては、適切なエンコーディングやヘッダーの設定が必要になることがある。

画像や音声、動画といったバイナリデータは一般的にはバイトストリームとして送信される。
しかし、これらのデータをHTTPリクエストのボディに直接配置することは難しい場合があります。
とくに、クライアントとサーバーがテキストベースのメディアタイプ(例:JSON、XMLなど)を使用している場合にはそうです。

そのような場合には、バイナリデータをBase64などの形式でエンコードすることでテキストとして送信することが可能になる。

これにより、JSONやXMLの中に画像データなどを埋め込むことができます。 ただし、この方法はデータ量が増えるため、大量のデータを送信する際には不適切な場合があります。

また、HTTPリクエストのボディに直接バイナリデータを配置することも可能です。 この場合、"Content-Type" ヘッダーを適切に設定することで、サーバーに対して送信しているデータのタイプを伝えることができます。

具体的には、ファイルアップロードの際には "multipart/form-data" を、 バイナリデータを直接送信する場合には "application/octet-stream" などを指定します。

それぞれの方法には一長一短があるため、実際の使用ケースに応じて適切な方法を選択することが重要

エンコードとは

エンコードとは、一定のルールに基づいて情報を別の形式に変換することを指す。
このルールを「エンコード方式」や「エンコード方式」とも呼ぶ

このエンコードのプロセスは、データを送信、保存、または操作するときにしばしば必要です。
たとえば、画像や音声などのバイナリデータをテキスト形式(ASCII文字等)に変換するときには、Base64というエンコード方式がよく使用されます。
これにより、バイナリデータをHTTPなどのテキストベースのプロトコルを通じて安全に送信できる。

エンコードされたデータは、元の形式に戻すために「デコード」というプロセスを踏む