ストリームの章の最後で、次のコードによって出力されるチャンクは何なのかという疑問が残ります。
印刷してみると、chunk は Buffer オブジェクトであり、その要素は 16 進数の 2 桁の数値、つまり 0 から 255 までの値であることがわかります。 [関連チュートリアルの推奨事項: nodejs ビデオ チュートリアル 、プログラミング教育 ]
ストリーム内を流れるデータがバッファであることを説明するでは、バッファーの素顔を探ってみましょう!
? なぜ Node に Buffer が導入されたのか?
当初、JS はブラウザ側でのみ動作していました。Unicode でエンコードされた文字列は処理しやすかったのですが、バイナリの場合は非 Unicode エンコーディングの文字列の処理が困難。バイナリはコンピュータの最低レベルのデータ形式であり、ビデオ、オーディオ、プログラム、ネットワークのパケットはすべてバイナリで保存されます。そこで、ノードはバイナリを操作するためのオブジェクトを導入する必要があるため、TCP ストリーム/ファイル システムやバイナリ バイトを処理するその他の操作に使用される Buffer が誕生しました。
Buffer は Node でよく使われるため、Node の起動時に Buffer が導入されており、require() を使用する必要はありません。
ArrayBuffer
何ですか
ArrayBuffer はメモリ内のバイナリ データです。メモリ自体を操作することはできません。TypedArray オブジェクト または DataView を通じて操作する必要があります。バッファ内のデータを特定の形式で表現し、これらの形式を通じてバッファの内容を読み書きします。配列インターフェイスを展開し、配列を使用してデータを操作できます
#TypedArray ビュー最も一般的に使用されるのは TypeArray ビューで、Uint8Array (符号なし 8 ビット整数) 配列ビュー、Int16Array (16 ビット整数) 配列ビューなどの単純な型の ArrayBuffer の読み取りと書き込みに使用されます Buffer との関係NodeJS の Buffer クラスは、実際には Uint8Array の実装です。 バッファ構造バッファは配列に似たオブジェクトですが、主にバイトの操作に使用されますモジュール構造バッファはJSを組み合わせたものですおよび C モジュールのパフォーマンス部分は C で実装され、非パフォーマンス部分は JS で実装されます。#オブジェクト構造
Buffer オブジェクトは配列に似ており、その要素は 2 桁の 16 進数、つまり 0 から 255 までの値です
この例から、異なる文字がバッファ内の異なるバイトを占有することがわかります。UTF-8 エンコーディングでは、中国語は 3 バイトを占有し、英語と半角記号は 1 バイトを占有します。
上記の状況の場合、バッファの処理は次のようになります。
- 取得した値が 255 より大きい場合は、0 から 255 までの値が得られるまで 256 を 1 つずつ減算します
- 10 進数の場合、整数部分のみが保持されます。
実際には、2 進数はまだメモリに保存されていますが、バッファはメモリを表示しています データは、サイズが 2 バイトの 16 進数の
バッファを使用しています。
00000001 00100011 のように、合計 16 ビットがあります。このように直接表示するのが不便な場合は、16ビットに変換してください Base<buffer></buffer>
Bufferの作成
Buffer.allocおよび Buffer.allocUnsafe
固定サイズのバッファを作成
Buffer.alloc(size [, fill [,coding]])
- size 新しいバッファーの必要な長さ
- fill 新しいバッファーを事前に埋めるために使用される値。デフォルト: 0
- encoding fill が文字列の場合、これはその文字エンコーディングです。デフォルト値: utf8
Buffer.allocUnsafe(size)
size バイトのバッファを割り当てます。 allocUnsafe は alloc よりも高速に実行されます。 Buffer.allocのように結果は00に初期化されません。
allocUnsafe呼び出し時に割り当てられるメモリセグメントはまだ初期化されていないため、メモリ割り当て速度は非常に遅くなりますが、割り当てられたメモリセグメントには古いデータが含まれている可能性があります。これらの古いデータが使用中に上書きされない場合、メモリ リークが発生する可能性があります。高速ではありますが、使用は避けてください。
Buffer モジュールは、Buffer.poolSize のサイズで内部 Buffer インスタンスを事前に割り当てます。クイック割り当てメモリ プールとして、allocUnsafe を使用して新しいバッファ インスタンスを作成するために使用されます。
Buffer.from
コンテンツに基づいてバッファを直接作成します。
- Buffer.from( string [, encoding] )
- Buffer.from(array)
- Buffer.from(buffer)
#のメモリメカニズムBuffer.allocUnsafe
適用されたメモリを効率的に使用するために、Node.js では動的管理メカニズムである適用前および割り当て後のスラブ機構を採用しています。指定されたサイズは、固定サイズのメモリ領域に適用されます。スラブには次の 3 つの状態があります。
full: 完全に割り当てられた状態- partial:部分的に割り当てられた状態
- 空: 割り当てられていない状態
- Node.js は、小さなオブジェクトと大きなオブジェクトを区別するために 8 KB を制限として使用します
小さなオブジェクトを割り当てる
割り当てられたオブジェクトが 8KB 未満の場合、ノードはそれを小さなオブジェクトとして割り当てます
バッファ割り当てプロセスでは、主にローカルの変数プールは中間処理オブジェクトとして機能し、割り当てられた状態のすべてのスラブ ユニットはそれを指します。以下は、新しいスラブ ユニットを割り当てる操作です。これにより、新しく適用された SlowBuffer オブジェクトがそのスラブ ユニットを指します
スラブ ユニット
2KB バッファの割り当て
2KB バッファを作成した後、スラブ単位のメモリは次のようになります。
この割り当てプロセスは実行されます。 by assign メソッドが完了しました
2KB バッファを作成した後、現在のスラブ ステータスは部分的です
バッファを再度作成するときに、残りのスラブ ステータスを判断しますスラブサイズ 十分なスペースはありますか?十分な場合は、残りのスペースを使用してスラブ割り当てステータスを更新します
スラブ スペースが十分でない場合は、新しいスラブが構築され、元のスラブの残りのスペースが無駄になります
大きなオブジェクトの割り当て
8KB を超えるバッファがある場合は、直接 creatUnsafeBuffer 関数に進み、スラブ ユニットを割り当てます。このスラブ ユニットは、この大きなバッファ オブジェクトによって排他的に占有されます。
allocate 割り当てメカニズムは図に示すとおりですバッファのメモリ割り当てメカニズム
バッファと文字エンコーディング
#
Node は現在、utf8、ucs2、utf16le、latin1、ascii、base64、hex、base64Url の 8 つのエンコード方式をサポートしています。異なるエンコーディング スキームごとに、一連の API が実装され、異なる結果が返されます。Node.js は、受信したエンコーディングに応じて異なるオブジェクトを返します##バッファと文字列の変換
Convert string to Buffer 主に前述の Buffer.from メソッドを使用し、デフォルトのエンコード方法は utf-8
Buffer to string
? 文字化けが発生するのはなぜですか?この問題を解決するにはどうすればよいでしょうか?
読み取りによると、各読み取りの長さは 4 で、チャンク出力は次のとおりです。data = chunk の場合は、
data = data.toString chunk.toString
と同等です。1 つの中国語文字が 3 バイトを占めるため、最初のチャンクの 4 バイト目に文字化けが表示されます。 2 番目のチャンクの 2 番目のバイトはテキストなどを形成できないため、文字化けの問題が表示されます。
ノード関連の詳細については、nodejs チュートリアル
を参照してください。
以上がノードのバッファーについて詳しく見るの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

JavaScript 不提供任何内存管理操作。相反,内存由 JavaScript VM 通过内存回收过程管理,该过程称为垃圾收集。

vscode自身是支持vue文件组件跳转到定义的,但是支持的力度是非常弱的。我们在vue-cli的配置的下,可以写很多灵活的用法,这样可以提升我们的生产效率。但是正是这些灵活的写法,导致了vscode自身提供的功能无法支持跳转到文件定义。为了兼容这些灵活的写法,提高工作效率,所以写了一个vscode支持vue文件跳转到定义的插件。

Node 19已正式发布,下面本篇文章就来带大家详解了解一下Node.js 19的 6 大特性,希望对大家有所帮助!

选择一个Node的Docker镜像看起来像是一件小事,但是镜像的大小和潜在漏洞可能会对你的CI/CD流程和安全造成重大的影响。那我们如何选择一个最好Node.js Docker镜像呢?

本篇文章给大家整理和分享几个前端文件处理相关的实用工具库,共分成6大类一一介绍给大家,希望对大家有所帮助。


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

ドリームウィーバー CS6
ビジュアル Web 開発ツール

MantisBT
Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

ZendStudio 13.5.1 Mac
強力な PHP 統合開発環境

メモ帳++7.3.1
使いやすく無料のコードエディター

DVWA
Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、

ホットトピック



