Skip to content

Commit 85ab4a5

Browse files
committed
buffer: add .from(), .alloc() and .allocUnsafe()
Several changes: * Soft-Deprecate Buffer() constructors * Add `Buffer.from()`, `Buffer.alloc()`, and `Buffer.allocUnsafe()` * Add `--zero-fill-buffers` command line option * Add byteOffset and length to `new Buffer(arrayBuffer)` constructor * buffer.fill('') previously had no effect, now zero-fills * Update the docs PR-URL: #4682 Reviewed-By: Сковорода Никита Андреевич <chalkerx@gmail.com> Reviewed-By: Stephen Belanger <admin@stephenbelanger.com>
1 parent 90a5fc2 commit 85ab4a5

File tree

229 files changed

+2824
-853
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

229 files changed

+2824
-853
lines changed

benchmark/buffers/buffer-base64-decode.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ function main(conf) {
88
const s = 'abcd'.repeat(8 << 20);
99
s.match(/./); // Flatten string.
1010
assert.equal(s.length % 4, 0);
11-
const b = Buffer(s.length / 4 * 3);
11+
const b = Buffer.allocUnsafe(s.length / 4 * 3);
1212
b.write(s, 0, s.length, 'base64');
1313
bench.start();
1414
for (var i = 0; i < 32; i += 1) b.base64Write(s, 0, s.length);

benchmark/buffers/buffer-base64-encode.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ var bench = common.createBenchmark(main, {});
55

66
function main(conf) {
77
var N = 64 * 1024 * 1024;
8-
var b = Buffer(N);
8+
var b = Buffer.allocUnsafe(N);
99
var s = '';
1010
var i;
1111
for (i = 0; i < 256; ++i) s += String.fromCharCode(i);

benchmark/buffers/buffer-bytelength.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ function main(conf) {
2828
strings.push(data);
2929
} else if (encoding === 'base64') {
3030
// Base64 strings will be much longer than their UTF8 counterparts
31-
strings.push(new Buffer(data, 'utf8').toString('base64'));
31+
strings.push(Buffer.from(data, 'utf8').toString('base64'));
3232
}
3333
}
3434

benchmark/buffers/buffer-compare.js

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,10 @@ var bench = common.createBenchmark(main, {
77
});
88

99
function main(conf) {
10-
var iter = (conf.millions >>> 0) * 1e6;
11-
var size = (conf.size >>> 0);
12-
var b0 = new Buffer(size).fill('a');
13-
var b1 = new Buffer(size).fill('a');
10+
const iter = (conf.millions >>> 0) * 1e6;
11+
const size = (conf.size >>> 0);
12+
const b0 = Buffer.alloc(size, 'a');
13+
const b1 = Buffer.alloc(size, 'a');
1414

1515
b1[size - 1] = 'b'.charCodeAt(0);
1616

Lines changed: 50 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,59 @@
11
'use strict';
22
const SlowBuffer = require('buffer').SlowBuffer;
33

4-
var common = require('../common.js');
5-
var bench = common.createBenchmark(main, {
6-
type: ['fast', 'slow'],
7-
len: [10, 1024],
4+
const common = require('../common.js');
5+
const assert = require('assert');
6+
const bench = common.createBenchmark(main, {
7+
type: [
8+
'fast-alloc',
9+
'fast-alloc-fill',
10+
'fast-allocUnsafe',
11+
'slow',
12+
'buffer()'],
13+
len: [10, 1024, 2048, 4096, 8192],
814
n: [1024]
915
});
1016

1117
function main(conf) {
12-
var len = +conf.len;
13-
var n = +conf.n;
14-
var clazz = conf.type === 'fast' ? Buffer : SlowBuffer;
15-
bench.start();
16-
for (var i = 0; i < n * 1024; i++) {
17-
new clazz(len);
18+
const len = +conf.len;
19+
const n = +conf.n;
20+
switch (conf.type) {
21+
case 'fast-alloc':
22+
bench.start();
23+
for (let i = 0; i < n * 1024; i++) {
24+
Buffer.alloc(len);
25+
}
26+
bench.end(n);
27+
break;
28+
case 'fast-alloc-fill':
29+
bench.start();
30+
for (let i = 0; i < n * 1024; i++) {
31+
Buffer.alloc(len, 0);
32+
}
33+
bench.end(n);
34+
break;
35+
case 'fast-allocUnsafe':
36+
bench.start();
37+
for (let i = 0; i < n * 1024; i++) {
38+
Buffer.allocUnsafe(len);
39+
}
40+
bench.end(n);
41+
break;
42+
case 'slow':
43+
bench.start();
44+
for (let i = 0; i < n * 1024; i++) {
45+
SlowBuffer(len);
46+
}
47+
bench.end(n);
48+
break;
49+
case 'buffer()':
50+
bench.start();
51+
for (let i = 0; i < n * 1024; i++) {
52+
Buffer(len);
53+
}
54+
bench.end(n);
55+
break;
56+
default:
57+
assert.fail(null, null, 'Should not get here');
1858
}
19-
bench.end(n);
2059
}

benchmark/buffers/buffer-indexof.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,11 +27,11 @@ function main(conf) {
2727
}
2828

2929
if (encoding === 'ucs2') {
30-
aliceBuffer = new Buffer(aliceBuffer.toString(), encoding);
30+
aliceBuffer = Buffer.from(aliceBuffer.toString(), encoding);
3131
}
3232

3333
if (conf.type === 'buffer') {
34-
search = new Buffer(new Buffer(search).toString(), encoding);
34+
search = Buffer.from(Buffer.from(search).toString(), encoding);
3535
}
3636

3737
bench.start();

benchmark/buffers/buffer-slice.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ var bench = common.createBenchmark(main, {
77
n: [1024]
88
});
99

10-
var buf = new Buffer(1024);
10+
var buf = Buffer.allocUnsafe(1024);
1111
var slowBuf = new SlowBuffer(1024);
1212

1313
function main(conf) {

benchmark/buffers/buffer-tostring.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ function main(conf) {
1212
const arg = conf.arg === 'true';
1313
const len = conf.len | 0;
1414
const n = conf.n | 0;
15-
const buf = Buffer(len).fill(42);
15+
const buf = Buffer.alloc(len, 42);
1616

1717
var i;
1818
bench.start();

benchmark/buffers/buffer_zero.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,13 @@ const bench = common.createBenchmark(main, {
66
n: [1024]
77
});
88

9-
const zero = new Buffer(0);
9+
const zero = Buffer.alloc(0);
1010

1111
function main(conf) {
1212
var n = +conf.n;
1313
bench.start();
1414
for (let i = 0; i < n * 1024; i++) {
15-
new Buffer(zero);
15+
Buffer.from(zero);
1616
}
1717
bench.end(n);
1818
}

benchmark/crypto/aes-gcm-throughput.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,10 @@ var bench = common.createBenchmark(main, {
99
});
1010

1111
function main(conf) {
12-
var message = (new Buffer(conf.len)).fill('b');
12+
var message = Buffer.alloc(conf.len, 'b');
1313
var key = crypto.randomBytes(keylen[conf.cipher]);
1414
var iv = crypto.randomBytes(12);
15-
var associate_data = (new Buffer(16)).fill('z');
15+
var associate_data = Buffer.alloc(16, 'z');
1616
bench.start();
1717
AEAD_Bench(conf.cipher, message, associate_data, key, iv, conf.n, conf.len);
1818
}

0 commit comments

Comments
 (0)