nodeJs学習ノート(4)---Stream

3333 ワード

Buffer


Bufferは、バイナリ専用のキャッシュ領域を作成するために使用されます.Bufferライブラリは、バイナリデータを処理できるノードに元のデータを格納する方法をもたらします.

Bufferの作成

1.var buf = new Buffer(10);
2.var buf = new Buffer([10, 20, 30, 40, 50]);
3.var buf = new Buffer("www.runoob.com", "utf-8");

utf-8はデフォルトの符号化方式であり、「ascii」、「utf 8」、「utf 16 le」、「ucs 2」、「base 64」、「hex」の符号化もサポートされている.

Nodeバッファへの書き込みの構文

buf.write(string[, offset[, length]][, encoding]);

バッファからデータを読み込む

buf.toString([encoding[, start[, end]]]);

その他の方法

//  buffer Json 
buf.toJSON();  
//                    
Buffer.concat(list[, totalLength]); 
//  
buf.compare(otherBuffer);    
//        
buf.copy(targetBuffer[, targetStart[, sourceStart[, sourceEnd]]]);
// 
buf.slice([start[, end]]);
// 
but.length;

サンプルコードは次のとおりです.
var fs = require('fs');
fs.readFile('logo.png', function(err, origin_buffer) {
    //  data 
    console.log(Buffer.isBuffer(origin_buffer));
    fs.writeFile('logo_buffer.jpg', origin_buffer, function(err) {
        if(err) console.log(err);
    })
    //  Buffer 'base64' 
    var base64Image = origin_buffer.toString('base64');

    console.log(base64Image);

    //    
    var decodeImage = new Buffer(base64Image, 'base64');
    console.log(Buffer.compare(origin_buffer, decodeImage));

    fs.writeFile('logo_buffer.jpg', decodeImage, function(err) {
        if(err) console.log(err);
    })
})

Stream


Streamは抽象的なインタフェースであり,ノードには多くのオブジェクトがこのインタフェースを実現している.たとえば、httpサーバに対してリクエストを開始するrequestオブジェクトはStreamであり、stdout(標準出力)である.
Node.js,Streamには4つのストリームタイプがある:Readable-読み取り可能な操作.Writable-書き込み可能な操作.Duplex-読み書き可能な操作.Transform-オペレーションはデータに書き込まれ、結果が読み出されます.
すべてのStreamオブジェクトはEventEmitterのインスタンスです.よく使用されるイベントは、data-データが読める場合にトリガーされます.end-読み取り可能なデータがない場合にトリガーされます.Error-受信および書き込み中にエラーが発生した場合にトリガーされます.finish-すべてのデータが最下位システムに書き込まれたときにトリガーされます.
自分でStreamをカスタマイズ
var stream = require('stream');
var util = require('util');

//  
function ReadStream() {
    stream.Readable.call(this);
}
//  
util.inherits(ReadStream, stream.Readable);
//  read 

ReadStream.prototype._read = function() {
    this.push('I');
    this.push('Love');
    this.push('Jocelyn
'); this.push(null); }; // function writStream() { stream.Writable.call(this); this._cache = new Buffer(''); } // util.inherits(writStream, stream.Writable); // write writStream.prototype._write = function(chunk, encode, cb) { console.log(chunk.toString()); cb(); } function TransformStream() { stream.Transform.call(this); } util.inherits(TransformStream, stream.Transform); TransformStream.prototype._transform = function(chunk, encode, cb) { this.push(chunk); cb(); } TransformStream.prototype._flush = function(cb) { this.push('Oh Yeah!'); cb(); } var rs = new ReadStream(); var ws = new writStream(); var ts = new TransformStream(); rs.pipe(ts).pipe(ws);

pipe


上記の例はpipe(パイプ)に用いられ、実際には1つの容器から別の容器に流入するパイプであり、rs.pipe(ws)パイプは入力ストリームに出力するメカニズムを提供する.通常、あるストリームからデータを取得し、別のストリームに渡すために使用されます.