簡単な入門Buffer

3809 ワード

bufferを初めて知った場合は、フロントエンドのJavaScriptにはbufferがないため、フロントエンドは文字列操作やDOM基本操作をすればビジネスニーズを満たすことができるため、よく知らないかもしれません.
bufferって何?
bufferはNodeの下位層がC++で申請したメモリであり,JSでメモリを割り当てる.つまり、ファイルを格納するバッファです.では、問題が来ました.なぜキャッシュエリアと呼ばれているのか、知る前にV 8のメモリ制限をみんなに科学的に普及させなければなりません.
コードに変数を宣言して値を割り当てると、使用するオブジェクトのメモリがスタックに割り当てられます.申請されたスタック空きメモリが新しいオブジェクトを割り当てるのに足りない場合は、スタックのサイズがV 8の制限を超えるまでスタックメモリを申請し続けます.(64ビットシステムでは約1.4 GB、32ビットシステムでは約0.7 GB)
ではまたなぜ制限するのか、実はこのように設計するのは目的があって、便利なV 8はごみの回収をして、ごみの回収をする時JSは停滞して、ごみの回収が完成してから回復することを待って、だからごみの回収の時間は私達の性能に関係して、メモリが大きすぎると時間が長ければ長いほど、V 8はこのように制限します.
このような制限の下で、ノードは大きなメモリオブジェクトを直接操作することができません.例えば、2 GBのファイルをメモリに読み込んで文字列分析処理を行うことができません.では、ファイルをbufferに読み込み、一時的に保存するので、バッファと呼ばれます.
bufferは申請したメモリであり、V 8メモリの制限を受けないが、物理メモリは依然として限られている.
Bufferについて
BufferはArrayのようなオブジェクトですが、主にバイトの操作に使用されます.
Bufferがあまりにも一般的であるため、ノードはプロセスの開始時にロードされ、グローバルオブジェクト(global)に配置されます.したがって、Bufferを使用する場合は、require()を介さずにそのまま使用できます.
Bufferオブジェクトは配列に似ており、要素は16進数の2桁、すなわち0~255の数値です.
let buf = Buffer.from('hello', 'utf8')
console.log(buf)
// 
console.log(buf.length) // 5
console.log(buf[0]) // 104

length属性にアクセスして長さ(バイトの長さを表し、utf 8符号化では漢字が3バイト、英語が1バイト)を得ることもできるし、要素に下付きでアクセスすることもできる.
下付きアクセス要素については、計算プロセスを経験することに注意してください.最初のアルファベットを例にとると,まずhはASCIIコード対照表から16進数が68であることを調べ,次いでJS中のtoString法によりパラメータを2に変換して1101000を得,その後10進数に変換すると104となるので,次のようにしてアクセスする最初の要素の結果は104である.
let buf = Buffer.from('hello', 'utf8')
console.log(buf)
// 
console.log((0x68).toString(2))
// 1101000

Buffer.fromの使い方はここで紹介しますが、最初のパラメータは文字列で、文字列を含むbufferを作成することを示し、2番目のパラメータは指定文字の符号化であり、デフォルト値もutf8です.