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)パイプは入力ストリームに出力するメカニズムを提供する.通常、あるストリームからデータを取得し、別のストリームに渡すために使用されます.