あなたが読めるストリームを作成するとき、それは最初の読み取り可能です。いくつかのデータイベントが発生し、ファイル全体が終了すると、ファイルには何も残っておらず、データイベントもなくなるため、ファイルはもう読み込めません。このデータイベントは、コールバックをバインドするかどうかにかかわらず発生します。ここでは、コールバックが起動されるまでにファイルが終了している可能性が高く、データイベントが残っていないため、もう読み込みできません。
var fs = require('fs');
var http = require('http');
var file = fs.createReadStream('text-file.txt');
console.log('1:', file.readable);
file.on('data', function(data) {
console.log('3:', file.readable, data); //it will fire chunks of the body of file
});
file.on('end', function() {
console.log('4:', file.readable); //This means there is no data events anymore, file finished
});
var req = http.request({}, function (res) {
console.log('2:', file.readable);
});
req.end();
また、ストリームを一時停止し、それが可能な状態になりますので、コールバックでそれを再開することができます。
var fs = require('fs');
var http = require('http');
var file = fs.createReadStream('text-file.txt');
file.pause();
console.log('1:', file.readable);
var req = http.request({}, function (res) {
file.resume();
console.log('2:', file.readable);
});
req.end();
そして、書き込み可能なストリームの場合は、もちろん、それはあなたがストリームを終了するまでの書き込み可能になりますそれは、読み込まれているファイルではなく、書き終わった時点を判断して書き終えます。
あなたの知る限りでは、TCPは書き込み可能であり、読み終わるまで読むことができます。したがって、データイベントが発生する可能性があります。データイベントは、相手側が書き込みを行い、書き込むときにデータイベントを作成するときに発生します。
だから、技術的にこれはもう書き込み可能ではありません。
var fs = require('fs');
var http = require('http');
var file = fs.createWriteStream('new-file.txt');
console.log('1:', file.writable);
file.end('I wanna sleep!');
console.log('2:', file.writable);
var req = http.request({}, function (res) {
console.log('3:', file.writable);
});
req.end();
私はおそらくこれはNode.jsの0.6.10、Linux上の最新の安定版、であることを追加する必要があります。 –