ホームページ >ウェブフロントエンド >jsチュートリアル >バッファーとは何ですか? Nodejs のバッファー モジュールの詳細については、こちらをご覧ください。
バッファとは何ですか?次の記事では、Nodejs のバッファー モジュールを深く理解し、バッファーの作成、コピー、スプライシング、インターセプト、バッファーへの充填、およびバッファーと文字列の変換の方法を紹介します。みんなの役に立ちますように!
JS には文字列、配列、数値、ブール値などを操作するためのメソッド API が対応していますが、Node ではファイル操作、ネットワーク通信、データベース操作、データ送信も必要であることがわかっています。機能; ファイルはストレージ レベルでバイナリ形式で表現され、http リクエストと応答でのデータ送信もバイナリ データで送信されるため、現在の JS 機能だけでは十分ではありません。そのため、Node## バッファ モジュールが必要です。 #で提供されます。
つまり、NodeJS に文字列などのバイナリ データを操作する機能を与えます。バッファは、一時記憶領域とも呼ばれ、入出力バイナリ データを一時的に保存するメモリのセクションです。
Nodejsのコアモジュールについて話します:ストリームモジュール(使用方法を参照)では、大きなファイルを読み取る場合、一般にメモリには読み込まれないことを学びました。データブロックは一度に読み取られますが、データブロックはストリームの形式で読み取られ、連続したデータブロックはデータストリームの概念を形成します。データ ブロックの読み取りおよび書き込みのプロセス中、データはまず buffer (一時バッファ領域) のメモリに保存されて処理されます。
#1.1 バッファ メモリ割り当てを理解する
#バッファ オブジェクトのメモリ割り当ては、V8 のヒープ メモリではなく、C で行われます。ノードのレベルでメモリ アプリケーションを実装します。アプリケーションを効率的に使用してメモリを取得するために、ノードはスラブ割り当てメカニズム (動的メモリ管理メカニズム) を採用します。1. 2 バッファのグローバルな性質
プロセスの開始時にノードはすでにバッファをメモリにインストールし、バッファをメモリに配置します。グローバル オブジェクトは、使用時に require なしで導入できますが、import または require ステートメントを通じて明示的に参照することが公式に推奨されています。2.1 Buffer.alloc(size[, fill[, encoding]])
パラメータ:import { Buffer } from 'buffer'; const buf = Buffer.alloc(8); console.log(buf); // <Buffer 00 00 00 00 00 00 00 00>
2.2 Buffer.allocUnsafe(size)
パラメータ:import { Buffer } from 'buffer'; const buf = Buffer.allocUnsafe(8); console.log(buf); // <Buffer e8 bf 99 e6 98 af e4 b8 80 e6>
2.3 Buffer.from(string[, encoding])
受信文字列を含む新しいバッファを作成しますパラメータ:
import { Buffer } from 'buffer'; const buf = Buffer.from('hello buffer'); console.log(buf); // <Buffer 68 65 6c 6c 6f 20 62 75 66 66 65 72>
2.4 Buffer.from(array)
0 –
255
array の範囲のバイトを使用して、新しい ## を割り当てます#バッファ###。
import { Buffer } from 'buffer'; const array = [0x62, 0x78, 0x84]; const buf = Buffer.from(array); console.log(buf); // <Buffer 62 78 84>
3. バッファのコピー
パラメータ:
buffer、コピーされるバッファ インスタンス
import { Buffer } from 'buffer'; // 新建 const buf1 = Buffer.alloc(10, 2); // 复制 const buf2 = Buffer.from(buf1); console.log(buf1); // <Buffer 02 02 02 02 02 02 02 02 02 02> console.log(buf2); // <Buffer 02 02 02 02 02 02 02 02 02 02>
buf インスタンスをターゲット target
import { Buffer } from 'buffer'; const buf1 = Buffer.alloc(10, 2); const buf2 = Buffer.allocUnsafe(10) // 将buf1复制到buf2 buf1.copy(buf2); console.log(buf1); // <Buffer 02 02 02 02 02 02 02 02 02 02> console.log(buf2); // <Buffer 02 02 02 02 02 02 02 02 02 02>
4 にコピーします。スプライス バッファ
リスト内のすべてのバッファ インスタンスが結合された新しいバッファを返します
パラメータ:
list:ce1f03efdfa3a50760234dcf9b3662a8 | 2352a1ddeafcbb075c98dd9a641f874c
リストにエントリがない場合、または totalLength が 0 の場合、新しい長さ 0 のバッファが返されます。
import { Buffer } from 'buffer'; const buf1 = Buffer.alloc(4, 2); const buf2 = Buffer.alloc(4, 3); const buf3 = Buffer.concat([buf1, buf2]); console.log(buf1); // <Buffer 02 02 02 02> console.log(buf2); // <Buffer 03 03 03 03> console.log(buf3); // <Buffer 02 02 02 02 03 03 03 03>
buf インスタンスから新しい Buffer インスタンスを返します。返された新しい Buffer インスタンスは、ソース buf インスタンスへの参照のみです。つまり、新しく返されたインスタンスへの変更は、元の Buffer インスタンスに影響します# ##パラメーター :### 6.1 buf.fill(value[, offset[, end]][, encoding]) 参数: 6.2 buf.write(string[, offset[, length]][, encoding]) 根据 encoding 中的字符编码将 string 写入 buf 的 offset 处。 参数: 7.1 Buffer.isBuffer(obj) 检验传入obj是否为buffer 7.2 Buffer.isEncoding(encoding) 检查传入的编码名称是否被Buffer所支持 Buffer转String 8.1 buf.toString([encoding[, start[, end]]]) 参数: String转Buffer 8.2 Buffer.from(string[, encoding]) 参数: 9.1 与Array类似点 9.2 与Array不同之处 更多node相关知识,请访问:nodejs 教程!!
import { Buffer } from 'buffer';
const buf1 = Buffer.alloc(10, 2);
// 截取
const buf2 = buf1.slice(1,4);
// 截取部分修改
buf2[0] = 0x63;
console.log(buf1);
// <Buffer 02 63 02 02 02 02 02 02 02 02>
console.log(buf2);
// <Buffer 63 02 02>
6. 填充Buffer
import { Buffer } from 'buffer';
const buf1 = Buffer.allocUnsafe(8).fill(2);
console.log(buf1);
// <Buffer 02 02 02 02 02 02 02 02>
注意
:length 参数是要写入的字节数。 如果 buf 没有足够的空间来容纳整个字符串,则只会写入 string 的一部分
import { Buffer } from 'buffer';
// buf1 length为12
const buf1 = Buffer.alloc(12, 3);
// write offset大于buf1.length,写入无效
buf1.write('hello', 12);
console.log(buf1);
// <Buffer 03 03 03 03 03 03 03 03 03 03 03 03>
// 部分写入
buf1.write('hello', 10);
// <Buffer 03 03 03 03 03 03 03 03 03 03 68 65>
7. Buffer工具方法
import { Buffer } from 'buffer';
const buf1 = Buffer.alloc(12, 3);
console.log(Buffer.isBuffer(buf1));
// true
import { Buffer } from 'buffer';
console.log(Buffer.isEncoding('utf-8'))
// true
8. Buffer与String的转换
import { Buffer } from 'buffer';
const buf1 = Buffer.allocUnsafe(26)
for (let i = 0; i < 26; i++) {
// 97 是 'a' 的十进制 ASCII 值。
buf1[i] = i + 97;
}
console.log(buf1.toString())
// abcdefghijklmnopqrstuvwxyz
import { Buffer } from 'buffer';
const buf = Buffer.from('hello buffer');
console.log(buf);
// <Buffer 68 65 6c 6c 6f 20 62 75 66 66 65 72>
9. Buffer与Array的对比
以上がバッファーとは何ですか? Nodejs のバッファー モジュールの詳細については、こちらをご覧ください。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。