JavaScript は文字列の処理には非常に優れていますが、もともと HTML ドキュメントを処理するように設計されているため、バイナリ データの処理はあまり得意ではありません。 JavaScript にはバイト型も構造化型もバイト配列もなく、数値と文字列だけがあります。 (原文: JavaScript にはバイト型がありません — 数字があるだけです — または構造化型、または http://skylitecellars.com/ バイト配列でも: 文字列があるだけです。)
Node は JavaScript に基づいているため、当然、HTTP などのテキスト プロトコルを処理できますが、データベースと対話したり、画像やファイルのアップロードを処理したりするために使用することもできます。文字列だけでこれらのことを行うのがどれほど難しいか想像できるでしょう。以前、Node はバイトをテキスト文字にエンコードすることでバイナリ データを処理していましたが、このアプローチは実行不可能で、リソースを無駄にし、遅く、柔軟性に欠け、保守が難しいことが後に判明しました。
Node にはバイナリ バッファ実装 Buffer があり、この疑似クラスはバイナリ データを処理するための一連の API を提供し、バイナリ データの処理を必要とするタスクを簡素化します。バッファの長さはバイトデータの長さによって決まり、バッファ内のバイトデータをランダムに設定したり取得したりできます。
注: Buffer クラスには特別な機能があり、バッファ内のバイト データによって占有されるメモリは JavaScrp
It VM メモリ ヒープに割り当てられません。つまり、これらのオブジェクトは JavaScript のガベージ コレクションによって処理されません。代わりに、変更されない永続的なメモリ アドレスがあり、バッファ内容のメモリ コピーによる CPU の無駄も回避されます。
バッファを作成する
次のように、UTF-8 文字列を使用してバッファを作成できます:
var buf = new Buffer(‘Hello World!');
指定したエンコーディングの文字列を使用してバッファを作成することもできます:
var buf = new Buffer('8b76fde713ce', 'base64');
受け入れられる文字エンコーディングと識別子は次のとおりです。 :
1 .ascii - ASCI、ASCII 文字セットにのみ適用されます。
2.utf8 - UTF-8、この可変幅エンコーディングは Unicode 文字セットのあらゆる文字に適しており、Web の世界では優先されるエンコーディングであり、Node のデフォルトのエンコーディング タイプとなっています。
3.base64—Base64、このエンコーディングはバイナリ データを表す 64 個の印刷可能な ASCII 文字に基づいています。Base64 は通常、文字列に変換できるバイナリ データを埋め込むために使用され、必要に応じて元の状態に戻すことができます。オリジナルのバイナリ形式。
バッファを初期化するデータがない場合は、指定した容量で空のバッファを作成できます:
var buf = new Buffer(1024); // 创建一个1024字节的缓冲
バッファ データを取得および設定します
バッファ オブジェクトを作成または受信した後、その内容を表示または変更することができます。 [] 演算子を使用してバッファの特定のバイトにアクセスできます:
var buf = new Buffer('my buffer content'); // 访问缓冲内第10个字节 console.log(buf[10]); // -> 99
注: 初期化されたバッファを作成するとき (バッファ容量サイズを使用)、バッファされたデータは 0 に初期化されないことに注意してください。ランダムなデータ。
var buf = new Buffer(1024); console.log(buf[100]); // -> 5 (某个随机值)
次のように、バッファ内の任意の位置のデータを変更できます。
buf[99] = 125; // 把第100个字节的值设置为125
注: 場合によっては、次のような一部のバッファリング操作ではエラーが発生しません。 バッファ内のバイトの最大値は
1 です。 255、バイトに 256 より大きい数値が割り当てられている場合、それは 256 を法として、結果がバイトに割り当てられます。
2. バッファ内の特定のバイトに値 256 が割り当てられている場合、その実際の値は 0 になります (翻訳者注: 実際には最初の値の繰り返しです、256%256=0)
3. 浮動小数点の場合数値はバッファに使用されます。100.7 以内のバイトに値を代入すると、実際の値は浮動小数点数の整数部分になります - 100
4 を超える位置に値を代入しようとすると、バッファ容量が不足している場合、割り当て操作は失敗し、バッファは変更されません。
length 属性を使用してバッファの長さを取得できます:
var buf = new Buffer(100); console.log(buf.length); // -> 100
また、バッファ長を使用してバッファの内容を反復して各バイトを読み取りまたは設定することもできます:
var buf = new Buffer(100); for(var i = 0; i < buf.length; i++) { buf[i] = i; }
上記のコードは新しいバッファを作成します100 バイトを含み、バッファ内の各バイトを 0 ~ 99 に設定します。
バッファ データの分割
バッファを作成または受信したら、バッファ データの一部を抽出する必要がある場合があります。開始位置を指定して既存のバッファを分割し、別の小さなバッファを作成できます。バッファの場合、新しいメモリの割り当てやコピーは行われません。新しいバッファは、親バッファの特定のデータ (開始位置で指定される) を参照するだけです。この一節にはいくつかの意味が含まれています。
まず第一に、プログラムが親バッファーの内容を変更すると、これらの変更は関連する子バッファーにも影響します。これは、親バッファーと子バッファーは異なる JavaScript オブジェクトであるため、この問題を無視して問題が発生する可能性があります。いくつかの潜在的なバグに。
次に、この方法で親バッファーから小さな子バッファーを作成すると、親バッファー オブジェクトは操作の完了後も保持され、ガベージ コレクションされません。注意しないと、簡単にメモリが発生する可能性があります。リーク。
注: メモリリークが心配な場合は、スライス操作の代わりにコピーメソッドを使用できます。以下で紹介します。
バッファ データのコピー
次のように、copy を使用してバッファの一部を別のバッファにコピーできます:
var buffer = new Buffer("this is the content of my buffer"); var smallerBuffer = buffer.slice(8, 19); console.log(smallerBuffer.toString()); // -> "the content"
上記のコードは、ソース バッファの 9 番目から 20 番目のバイトをターゲット バッファの先頭にコピーします。
バッファされたデータのデコード
バッファされたデータは次のように UTF-8 文字列に変換できます:
var str = buf.toString();
还可以通过指定编码类型来将缓冲数据解码成任何编码类型的数据。比如,你想把一个缓冲解码成base64字符串,可以这么做:
var b64Str = buf.toString("base64");
使用toString函数,你还可以把一个UTF-8字符串转码成base64字符串:
var utf8String = 'my string'; var buf = new Buffer(utf8String); var base64String = buf.toString('base64')
小结
有时候,你不得不跟二进制数据打交道,但是原生JavaScript又没有明确的方式来做这件事,于是Node提供了Buffer类,封装了一些针对连续内存块的操作。你可以在两个缓冲之间切分或复制内存数据。
你也可以把一个缓冲转换成某种编码的字符串,或者反过来,把一个字符串转化成缓冲,来访问或处理每个bit。
更多Node.js中使用Buffer编码、解码二进制数据详解相关文章请关注PHP中文网!

さまざまなJavaScriptエンジンは、各エンジンの実装原則と最適化戦略が異なるため、JavaScriptコードを解析および実行するときに異なる効果をもたらします。 1。語彙分析:ソースコードを語彙ユニットに変換します。 2。文法分析:抽象的な構文ツリーを生成します。 3。最適化とコンパイル:JITコンパイラを介してマシンコードを生成します。 4。実行:マシンコードを実行します。 V8エンジンはインスタントコンピレーションと非表示クラスを通じて最適化され、Spidermonkeyはタイプ推論システムを使用して、同じコードで異なるパフォーマンスパフォーマンスをもたらします。

現実世界におけるJavaScriptのアプリケーションには、サーバー側のプログラミング、モバイルアプリケーション開発、モノのインターネット制御が含まれます。 2。モバイルアプリケーションの開発は、ReactNativeを通じて実行され、クロスプラットフォームの展開をサポートします。 3.ハードウェアの相互作用に適したJohnny-Fiveライブラリを介したIoTデバイス制御に使用されます。

私はあなたの日常的な技術ツールを使用して機能的なマルチテナントSaaSアプリケーション(EDTECHアプリ)を作成しましたが、あなたは同じことをすることができます。 まず、マルチテナントSaaSアプリケーションとは何ですか? マルチテナントSaaSアプリケーションを使用すると、Singの複数の顧客にサービスを提供できます

この記事では、許可によって保護されたバックエンドとのフロントエンド統合を示し、next.jsを使用して機能的なedtech SaaSアプリケーションを構築します。 FrontEndはユーザーのアクセス許可を取得してUIの可視性を制御し、APIリクエストがロールベースに付着することを保証します

JavaScriptは、現代のWeb開発のコア言語であり、その多様性と柔軟性に広く使用されています。 1)フロントエンド開発:DOM操作と最新のフレームワーク(React、Vue.JS、Angularなど)を通じて、動的なWebページとシングルページアプリケーションを構築します。 2)サーバー側の開発:node.jsは、非ブロッキングI/Oモデルを使用して、高い並行性とリアルタイムアプリケーションを処理します。 3)モバイルおよびデスクトップアプリケーション開発:クロスプラットフォーム開発は、反応および電子を通じて実現され、開発効率を向上させます。

JavaScriptの最新トレンドには、TypeScriptの台頭、最新のフレームワークとライブラリの人気、WebAssemblyの適用が含まれます。将来の見通しは、より強力なタイプシステム、サーバー側のJavaScriptの開発、人工知能と機械学習の拡大、およびIoTおよびEDGEコンピューティングの可能性をカバーしています。

JavaScriptは現代のWeb開発の基礎であり、その主な機能には、イベント駆動型のプログラミング、動的コンテンツ生成、非同期プログラミングが含まれます。 1)イベント駆動型プログラミングにより、Webページはユーザー操作に応じて動的に変更できます。 2)動的コンテンツ生成により、条件に応じてページコンテンツを調整できます。 3)非同期プログラミングにより、ユーザーインターフェイスがブロックされないようにします。 JavaScriptは、Webインタラクション、シングルページアプリケーション、サーバー側の開発で広く使用されており、ユーザーエクスペリエンスとクロスプラットフォーム開発の柔軟性を大幅に改善しています。

Pythonはデータサイエンスや機械学習により適していますが、JavaScriptはフロントエンドとフルスタックの開発により適しています。 1. Pythonは、簡潔な構文とリッチライブラリエコシステムで知られており、データ分析とWeb開発に適しています。 2。JavaScriptは、フロントエンド開発の中核です。 node.jsはサーバー側のプログラミングをサポートしており、フルスタック開発に適しています。


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

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

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

MinGW - Minimalist GNU for Windows
このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

PhpStorm Mac バージョン
最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール

SublimeText3 中国語版
中国語版、とても使いやすい
