JSのバイナリファミリーについての簡単な説明

JSのバイナリファミリーについての簡単な説明

概要

Blob: ファイル操作をサポートするために特に使用されるフロントエンド上のバイナリオブジェクト

ArrayBuffer: フロントエンドの汎用バイナリバッファ。配列に似ていますが、API と機能に多くの違いがあります。

バッファ: Node.js が提供するバイナリ バッファ。I/O 操作の処理によく使用されます。

ブロブ

まず、ファイル操作をサポートするために使用される Blob を紹介します。簡単に言うと、JS には File と Blob という 2 つのコンストラクターがあり、File は Blob のすべてのプロパティを継承します。

したがって、私たちの観点からすると、File オブジェクトは特別な Blob オブジェクトと見なすことができます。

フロントエンドエンジニアリングでは、どの操作で File オブジェクトを取得できますか? 参照:

(注: ファイル API 仕様の現在のステータスはワーキング ドラフトです)

上で述べたように、File オブジェクトは特別な Blob オブジェクトなので、当然 Blob オブジェクトのメソッドを直接呼び出すことができます。 Blobの具体的なメソッドと、それを使ってどのような機能を実現できるかを見てみましょう。

Blob の動作

BLOB は、window.URL.createObjectURL メソッドを通じて Blob URL に変換され、ファイルのダウンロードや画像の表示のリンクとして使用できます。

Blob URL によって実装されるダウンロード機能または表示機能は、単一のブラウザ内でのみ実行できます。サーバーに保存できない、またはサーバーに保存する意味がありません。

これはBlobの例です。非常に短いことがわかります。

ブロブ:d3958f5c-0777-0845-9dcf-2cb28783acaf

長い Base64 形式のデータ URL と比較すると、Blob URL の長さは十分な情報を保存するには明らかに不十分であり、これはブラウザ内の「参照」のようなものだということです。この観点から見ると、Blob URL はブラウザ自体によって開発された疑似プロトコルです。

BLOB ダウンロード ファイル

window.URL.createObjectURL を通じて Blob (ファイル) オブジェクトを受け取り、それを Blob URL に変換し、それを a.download プロパティに割り当てて、ページ上のこのリンクをクリックしてダウンロードすることができます。

<!-- html 部分 -->
<a id="h">ダウンロードするにはここをクリック</a>
<!-- js 部分 -->
<スクリプト>
  var blob = new Blob(["Hello World"]);
  var url = window.URL.createObjectURL(blob);
  var a = document.getElementById("h");
  a.download = "helloworld.txt";
  a.href = URL;
</スクリプト>

注意: ダウンロード属性は IE と互換性がありません。window.navigator.msSaveBlob メソッドまたはその他のメソッド (IE10/11) を通じて IE を最適化できます。

運用結果

ブロブ画像のローカル表示

window.URL.createObjectURL によって生成された Blob URL を img.src に割り当てて画像を表示することもできます。

<!-- html 部分 -->
<input type="file" id='f' />
<img id='img' スタイル="幅: 200px;高さ: 200px;" />
<!-- js 部分 -->
<スクリプト>
  document.getElementById('f').addEventListener('change', 関数(e) {
    var ファイル = this.files[0];
    定数img = document.getElementById('img');
    定数 url = window.URL.createObjectURL(ファイル);
    url = 画像ファイル
    img.onload = 関数(){
        // URL.createObjectURL を呼び出して以前に作成した URL オブジェクトを解放します。window.URL.revokeObjectURL(url);
    }
  }、 間違い);
</スクリプト>

運用結果

BLOBファイルのアップロード

  • Blob.slice(start,end) は大きな Blob を複数の小さな Blob に分割するために使用できます。
  • xhr.sendはBlobオブジェクトを直接送信できる

フロントエンド

<!-- html 部分 -->
<input type="file" id='f' />
<!-- js 部分 -->
<スクリプト>
  関数アップロード(blob) {
    var xhr = 新しい XMLHttpRequest();
    xhr.open('POST', '/ajax', true);
    xhr.setRequestHeader('コンテンツタイプ'、'text/plain')
    xhr.send(blob);
  }
  document.getElementById('f').addEventListener('change', 関数(e) {
    var blob = this.files[0];
    定数CHUNK_SIZE = 20; 。
    SIZE = blob.size;
    var 開始 = 0;
    var end = CHUNK_SIZE;
    (開始 < サイズ) {
        アップロード(blob.slice(開始、終了));
        開始 = 終了;
        終了 = 開始 + CHUNK_SIZE;
    }
  }、 間違い);
</スクリプト>

ノード

app.use(async (ctx, next) => {
    次の()を待ちます。
    ctx.path === '/ajax' の場合 {
        定数 req = ctx.req;
        const body = parse(req); を待機します。
        ctx.ステータス = 200;
        コンソールログ(本体);
        コンソールログ('---------------');
    }
});

ファイルの内容

湛江市商務局によると、今年1月から10月までに湛江市で実際に利用された外資は

運用結果

ファイルの内容をローカルで読み取る

Blobまたはファイルオブジェクトを読み取って他の形式のデータに変換したい場合は、FileReaderオブジェクトのAPIを使用して操作できます。

  • FileReader.readAsText(Blob): Blobをテキスト文字列に変換します
  • FileReader.readAsArrayBuffer(Blob): Blob を ArrayBuffer 形式のデータに変換します。
  • FileReader.readAsDataURL(): Blob を Base64 形式のデータ URL に変換します。

次に、ファイルの内容を文字列として読み取ってみます。

<input type="file" id='f' />


document.getElementById('f').addEventListener('change', 関数(e) {
    var ファイル = this.files[0];
    const リーダー = 新しい FileReader();
    reader.onload = 関数(){
        定数コンテンツ = reader.result;
        console.log(コンテンツ);
    }
    reader.readAsText(ファイル);
}、 間違い);

運用結果

以上はBlobの使い方を紹介しました。Blobがファイル用であることは簡単にわかります。つまり、ファイルオブジェクトであると言えます。同時に、Blobにはバイナリデータの詳細を操作する機能が欠けていることがわかります。たとえば、バイナリデータの一部を変更したい場合、Blobだけでは明らかに不十分です。このきめ細かい機能は、以下で紹介するArrayBufferによって完了できます。

配列バッファ

ArrayBuffer の一般的な機能を図で見てみましょう。

同時に、ArrayBufferはネイティブJS配列とは大きく異なることに注意する必要があります。図をご覧ください。

以下、一つずつ詳しく紹介します

ArrayBuffer形式でローカルデータを読み取る

document.getElementById('f').addEventListener('change', 関数(e) {
  ファイル = this.files[0];
  新しいFileReader()を作成します。
  fileReader.onload = 関数(){
    定数結果 = fileReader.result;
    console.log(結果)
  }
  fileReader.readAsArrayBuffer(ファイル);
}、 間違い);

運用結果

Ajax リクエストデータを ArrayBuffer 形式で読み取る

xhr.responseType = "arraybuffer" でレスポンスのデータ型を指定します。

onload コールバックで xhr.response を印刷する

フロントエンド

const xhr = 新しい XMLHttpRequest();
xhr.open("GET", "ajax", true);
xhr.responseType = "配列バッファ";
xhr.onload = 関数 () {
    コンソールログ(xhr.response)
}
xhr.send();

ノード

const app = new Koa();
app.use(async (ctx) => {
  if (パス名 = '/ajax') {
        ctx.body = 'こんにちは世界';
        ctx.ステータス = 200;
   }
}).listen(3000)

運用結果

TypeArray 経由で ArrayBuffer に書き込む

const typedArray1 = 新しい Int8Array(8);
型付き配列1[0] = 32;

const typedArray2 = 新しい Int8Array(typedArray1);
型付き配列2[1] = 42;
 
コンソールにログ出力します。
// 出力: Int8Array [32, 0, 0, 0, 0, 0, 0, 0]
 
コンソールにログ出力します。
// 出力: Int8Array [32, 42, 0, 0, 0, 0, 0, 0, 0]

DataView 経由で ArrayBuffer に書き込む

定数バッファ = 新しいArrayBuffer(16);
const view = 新しい DataView(バッファ);
ビュー.setInt8(2, 42);
コンソールログ(view.getInt8(2));
// 出力: 42

バッファ

Buffer は Node.js によって提供されるオブジェクトであり、フロントエンドでは使用できません。 一般的にはIO操作に使用されます。例えば、フロントエンドのリクエストデータを受信する場合、受信したフロントエンドデータを次のBuffer APIを通じて統合することができます。

バッファの動作

以下にいくつか例を挙げます。

ノード側(Koa)

const app = new Koa();
app.use(async (ctx, next) => {
    ctx.path === '/ajax' の場合 {
        const チャンク = [];
        定数 req = ctx.req;
        req.on('データ', buf => {
            chunks.push(buf);
        })
        req.on('end', () => {
            buffer = Buffer.concat(チャンク) とします。
            コンソールログ(バッファ.toString())
        })
    }
});
アプリを聴く(3000)

フロントエンド

const xhr = 新しい XMLHttpRequest();
xhr.open("POST", "ajax", true);
xhr.setRequestHeader('コンテンツタイプ'、'text/plain')
xhr.send("asdasdsadfsdfsadasdas");

運用結果

ノード出力

asdasdsadfsdfsadasdas

上記は、JS のバイナリ ファミリの詳細についての簡単な説明です。JS のバイナリ ファミリの詳細については、123WORDPRESS.COM の他の関連記事に注目してください。

以下もご興味があるかもしれません:
  • JavaScript に基づくバイナリ画像ストリームの処理プロセスの詳細な説明
  • node.JS バイナリ操作モジュールにおけるバッファオブジェクトの使用方法の詳細な説明
  • Node.jsバイナリとBufferの紹介と使用
  • JS文字列とバイナリ間の相互変換の詳細なコード例
  • Node.js Windows バイナリのインストール方法
  • JavaScript でバイナリデータを読み書きする方法の詳細な説明
  • js バイナリデータ操作方法
  • nodeJSバイナリバッファオブジェクトの詳細な説明
  • jsはbase64でエンコードされたバイナリストリームのWebページ画像を表示します
  • JavaScript バイナリ演算スキルの分析

<<:  Tomcat パイプライン モードのパイプラインとバルブの詳細な説明

>>:  MacにMySQLデータベースをインストールする方法を教えます

推薦する

Alibaba Cloudのセキュリティルール設定の詳細な説明

2日前、ダブル11ショッピングフェスティバルを利用して、Alibaba CloudでECS(サーバー...

HTMLフォームアプリケーションにはチェックボックスとラジオボタンの使用が含まれます

チェックボックスやラジオボタンの使用を含むコードをコピーコードは次のとおりです。 <!DOCT...

Nginx 構成 SSL および WSS 手順の紹介

目次序文1. Nginxのインストール1. Nginxをダウンロードする2. 依存関係をインストール...

CSSプロパティに基づいたボタンホバーボーダーと背景アニメーションのコレクション

ハートの属性不透明度: .999 は要素のスタッキングコンテキストを作成し、ボタン6と8のアニメーシ...

CSSの複数条件の書き方の詳細説明:

:not疑似クラスセレクターは、式に一致しない要素をフィルタリングできます。例 テーブル tbod...

...

Linux コマンドラインのクイックヒント: ファイルの検索方法

私たちのコンピューターには、ディレクトリ、写真、ソース コードなどのファイルが保存されています。たく...

FTP、FTPS、SFTPの違いについて簡単に説明します

目次FTP、FTPS、SFTP の概要FTP FTPS FTPサーバーFTPソフトウェアのアクティブ...

JavaScript 円グラフの例

描画効果実装コードJavaScript var キャンバス = document.getElemen...

Docker を使用した ElasticSearch:7.8.0 クラスターのインストールに関する詳細なチュートリアル

ElasticSearch クラスターは、クラスターを構築するための動態請求的方式と靜態配置文件をサ...

Vue で Excel ストリーム ファイルをダウンロードし、ダウンロード ファイル名を設定する方法

目次概要1. URL経由でダウンロード2. aタグのダウンロード属性とblobコンストラクタを組み合...

DockerでLNMPアーキテクチャを展開する方法

環境要件: IPホスト名192.168.1.1ノード1プロジェクト計画:コンテナネットワークセグメン...

win10 mysql 5.6.35 winx64 無料インストールバージョン設定チュートリアル

mysql 5.6.35 winx64無料インストールバージョン構成チュートリアルwin10、具体的...

Node.js コンソールで強調表示されたコードを印刷する方法

序文コードを実行してエラーが発生すると、エラーが出力されます。エラーにはスタック情報が含まれており、...

CSS ワールド - コード実践: 画像の Alt 情報の表示

ただし、デフォルトの src を持つ <img> 要素を使用してスクロール読み込み効果を...