mirror of https://github.com/lukechilds/node.git
Browse Source
Add a bytesRead property for readable is useful in some use cases. When user want know how many bytes read of readable, need to caculate it in userland. If encoding is specificed, get the value is very slowly. PR-URL: https://github.com/nodejs/node/pull/4372 Reviewed-By: Trevor Norris <trev.norris@gmail.com> Reviewed-By: Colin Ihrig <cjihrig@gmail.com> Reviewed-By: James M Snell <jasnell@gmail.com>process-exit-stdio-flushing
Jackson Tian
9 years ago
committed by
James M Snell
4 changed files with 127 additions and 5 deletions
@ -0,0 +1,119 @@ |
|||
'use strict'; |
|||
|
|||
require('../common'); |
|||
const assert = require('assert'); |
|||
const Readable = require('stream').Readable; |
|||
const Duplex = require('stream').Duplex; |
|||
const Transform = require('stream').Transform; |
|||
|
|||
(function() { |
|||
const readable = new Readable({ |
|||
read: function(n) { |
|||
var i = this._index++; |
|||
if (i > this._max) |
|||
this.push(null); |
|||
else |
|||
this.push(new Buffer('a')); |
|||
} |
|||
}); |
|||
|
|||
readable._max = 1000; |
|||
readable._index = 1; |
|||
|
|||
var total = 0; |
|||
readable.on('data', function(chunk) { |
|||
total += chunk.length; |
|||
}); |
|||
|
|||
readable.on('end', function() { |
|||
assert.equal(total, readable.bytesRead); |
|||
}); |
|||
})(); |
|||
|
|||
(function() { |
|||
const readable = new Readable({ |
|||
read: function(n) { |
|||
var i = this._index++; |
|||
if (i > this._max) |
|||
this.push(null); |
|||
else |
|||
this.push(new Buffer('a')); |
|||
} |
|||
}); |
|||
|
|||
readable._max = 1000; |
|||
readable._index = 1; |
|||
|
|||
var total = 0; |
|||
readable.setEncoding('utf8'); |
|||
readable.on('data', function(chunk) { |
|||
total += Buffer.byteLength(chunk); |
|||
}); |
|||
|
|||
readable.on('end', function() { |
|||
assert.equal(total, readable.bytesRead); |
|||
}); |
|||
})(); |
|||
|
|||
(function() { |
|||
const duplex = new Duplex({ |
|||
read: function(n) { |
|||
var i = this._index++; |
|||
if (i > this._max) |
|||
this.push(null); |
|||
else |
|||
this.push(new Buffer('a')); |
|||
}, |
|||
write: function(chunk, encoding, next) { |
|||
next(); |
|||
} |
|||
}); |
|||
|
|||
duplex._max = 1000; |
|||
duplex._index = 1; |
|||
|
|||
var total = 0; |
|||
duplex.setEncoding('utf8'); |
|||
duplex.on('data', function(chunk) { |
|||
total += Buffer.byteLength(chunk); |
|||
}); |
|||
|
|||
duplex.on('end', function() { |
|||
assert.equal(total, duplex.bytesRead); |
|||
}); |
|||
})(); |
|||
|
|||
(function() { |
|||
const readable = new Readable({ |
|||
read: function(n) { |
|||
var i = this._index++; |
|||
if (i > this._max) |
|||
this.push(null); |
|||
else |
|||
this.push(new Buffer('{"key":"value"}')); |
|||
} |
|||
}); |
|||
readable._max = 1000; |
|||
readable._index = 1; |
|||
|
|||
const transform = new Transform({ |
|||
readableObjectMode : true, |
|||
transform: function(chunk, encoding, next) { |
|||
next(null, JSON.parse(chunk)); |
|||
}, |
|||
flush: function(done) { |
|||
done(); |
|||
} |
|||
}); |
|||
|
|||
var total = 0; |
|||
readable.on('data', function(chunk) { |
|||
total += chunk.length; |
|||
}); |
|||
|
|||
transform.on('end', function() { |
|||
assert.equal(0, transform.bytesRead); |
|||
assert.equal(total, readable.bytesRead); |
|||
}); |
|||
readable.pipe(transform); |
|||
})(); |
Loading…
Reference in new issue