バッファモジュール
JSはもともとブラウザー用に設計されていたため、Unicodeエンコード文字列をうまく処理できますが、バイナリデータをうまく処理することはできません。 node.jsは、ネットワーク上のバイナリ形式で送信されることが多いデータを送信および受信するように設計されているため、これはnode.jsの問題です。例えば:
-TCP接続を介してデータを送信および受信します。
- 画像または圧縮ファイルからバイナリデータを読み取ります。
- ファイルシステムからデータを読み取り、書き込みます。
- ネットワークからバイナリデータストリームを処理します
バッファモジュールは、node.jsに生データを保存する方法をもたらすため、JSのコンテキストでバイナリデータを使用できます。 I/O操作で移動したデータをnode.jsで処理する必要がある場合は、バッファモジュールを使用することができます。
クラス:バッファー
バッファクラスは、バイナリデータを直接処理するために使用されるグローバル変数タイプです。さまざまな方法で構築できます。
生データは、バッファクラスのインスタンスに保存されます。バッファインスタンスは、整数の配列に似ています
1.ニューバッファー(サイズ):サイズがサイズの新しいバッファサイズ8ビットバイトを割り当てます。
2.ニューバッファー(配列):8ビットバイト配列を使用する新しいバッファーを割り当てます。
3.ニューバッファー(STR、[エンコード]):文字列タイプのエンコード - エンコード方法が使用され、パラメーターはオプションです。
4。クラス方法:buffer.isencoding(エンコード):指定されたエンコーディングエンコードが有効な場合はtrueを返し、それ以外の場合はfalseを返します。
5。クラス方法:buffer.isbuffer(obj):このOBJがバッファーであるかどうかをテストします。ブール値を返します
6。クラス方法:buffer.concat(list、[totallength]):list {array}配列タイプ、バッファー配列、接続されていました。 totallength {number}上記のバッファーアレイのすべてのバッファの合計サイズを入力します。
ファイルを読み取ってバッファインスタンスを取得することに加えて、たとえば次のように直接構築することもできます。
コードコピーは次のとおりです。
var bin = newバッファー([0x48、0x65、0x6c、0x6c、0x6c]);
バッファーは文字列に似ています。 .length属性を使用してバイトの長さを取得することに加えて、[インデックス]メソッドを使用して、指定された位置でバイトを読み取ることもできます。
コードコピーは次のとおりです。
bin [0]; // => 0x48;
バッファと文字列は互いに変換できます。たとえば、バイナリデータは、指定されたエンコードを使用して文字列に変換できます。
コードコピーは次のとおりです。
var str = bin.tostring( 'utf-8'); // =>「こんにちは」
新しいバッファーを返す代わりに、.Sliceメソッドは、以下に示すように、元のバッファの中央にある場所へのポインターを返します。
コードコピーは次のとおりです。
1. [0x48、0x65、0x6c、0x6c、0x6c]
2。 ^ ^
3。| |
4。BinBin.Slice(2)
バッファに書き込みます
コードコピーは次のとおりです。
varバッファー=新しいバッファー(8); // 8バイトのメモリが割り当てられたバッファーを作成します
console.log(buffer.write( 'a'、 'utf8')); // output 1
これにより、バッファーに文字「A」が記述され、ノードはエンコードされた後にバッファーに書き込まれたバイト数を返します。ここで文字aのUTF-8エンコードは1バイトを占めます。
バッファをコピーします
node.jsは、バッファオブジェクトの内容全体を別のバッファオブジェクトにコピーする方法を提供します。既存のバッファオブジェクト間でのみコピーすることができるため、それらを作成する必要があります。
コードコピーは次のとおりです。
buffer.copy(buffertocopyto)
その中で、Buffertocopytoはコピーされるターゲットバッファオブジェクトです。次の例:
コードコピーは次のとおりです。
var buffer1 = new Buffer(8);
buffer1.write( 'u満たすのはいいね'、 'utf8');
var buffer2 = new Buffer(8);
buffer1.copy(buffer2);
console.log(buffer2.tostring()); // uに会えてうれしいです
ストリームモジュール
UNIXタイプのオペレーティングシステムでは、ストリーミングは標準的な概念です。次の3つのメインストリームがあります。
1。標準入力
2。標準出力
3。標準エラー
読み取り可能なストリーム
バッファがnode.jsが生データを処理する方法である場合、通常、ストリームはnode.jsがデータを移動する方法です。 node.jsのストリームは読み取り可能または書き込み可能です。 node.jsの多くのモジュールは、HTTPやファイルシステムを含むストリームを使用します。
ClassMates.txtファイルを作成し、そのデータを使用できるように名前リストを読み取るとします。データはストリームであるため、これはファイルの読み取りを完了する前に、受信した最初の数バイトのデータに基づいて行動できることを意味します。これはnode.jsの一般的なパターンです:
コードコピーは次のとおりです。
var fs = require( 'fs');
var stream = fs.readstream( 'classmates.txt');
Stream.SetEncoding( 'utf8');
stream.on( 'data'、function(chunk){
console.log( 'いくつかのデータを読む')
});
stream.on( 'close'、function(){
console.log( 'すべてのデータが読み取られます')
});
上記の例では、新しいデータが受信されるとイベントデータがトリガーされます。閉鎖イベントは、ファイルの読み取りが完了するとトリガーされます。
書き込み可能なストリーム
明らかに、データを書き込むための書き込み可能なストリームを作成することもできます。これは、単純なスクリプトを使用してファイルを読み取り、別のファイルに書き込むことができることを意味します。
コードコピーは次のとおりです。
var fs = require( 'fs');
var readableStream = fs.readstream( 'classmates.txt');
var writableStream = fs.writeStream( 'names.txt');
readableStream.setEncoding( 'utf8');
readableStream.on( 'data'、function(chunk){
writablestream.write(chunk);
});
readableStream.on( 'close'、function(){
writablestream.end();
});
現在、データイベントが受信されると、データは書き込み可能なストリームに書き込まれます。
readable.setencoding(encoding):return:this
readable.resume():上記と同じ。この方法により、読み取り可能なストリームがデータイベントのトリガーを続けることができます。
readable.pause():上記と同じ。この方法により、フローモードのストリームがデータイベントのトリガーを停止し、非フローモードに切り替え、その後の利用可能なデータを内部バッファに残します。
クラス:stream.writable
書き込み可能なストリームインターフェイスは、ターゲットに記述しているデータの抽象化です。
1.writable.write(chunk、[encoding]、[callback]):
chunk {string |バッファー}記述するデータ
{string}エンコードのエンコード、チャンクが文字列の場合
データブロックの書き込み後のコールバック{function}コールバック
return:{boolean}データがすべて処理されている場合はtrue。
このメソッドは、基礎となるシステムにデータを書き込み、データが処理された後に指定されたコールバックを呼び出します。
2.writable.cork():すべての書き込みをトラップすることを余儀なくされます。
スタックされたデータは、.uncork()または.end()呼び出しが呼び出されたときに記述されます。
3.writable.end([chunk]、[encoding]、[callback])
chunk {string |バッファ}オプション、記述するデータ
{string}エンコードのエンコード、チャンクが文字列の場合
コールバック{function}オプション、ストリームが終了した後のコールバック
end()を呼び出した後にwrite()を呼び出すと、エラーが生成されます。
コードコピーは次のとおりです。
//「こんにちは」と書いてから、「世界!」で終わります
http.createserver(function(req、res){
res.write( 'hello、');
res.End( 'world!');
//これで執筆を続けることは許可されていません
});