Как работать с Buffer.from и Buffer.slice в nodejs - PullRequest
0 голосов
/ 19 июня 2020

Новичок пытается работать с байтами, используя Node.js. Я использую этот буфер

Эта строка:

let a = new Uint8Array([64, 9, 33, 251, 84, 65, 23, 68, 1, 2, 3]);
console.log(a.slice(0, 8).buffer);
let x = new DataView(a.slice(0, 8).buffer);
console.log(x.getFloat64(0));

будет напечатана, как и должно быть:

ArrayBuffer {
  [Uint8Contents]: <40 09 21 fb 54 41 17 44>,
  byteLength: 8
}
3.1415926535

---

Однако этот slice().buffer вернет 8192 байта, даже если входные данные те же 10 байтов:

let b = Buffer.from([64, 9, 33, 251, 84, 65, 23, 68, 1, 2, 3]);
console.log("b only = ", b);
console.log("b buff = ", b.slice(0, 8).buffer);
let y = new DataView(b.slice(0, 8).buffer);
console.log(y.getFloat64(0));

print:

b only =  <Buffer 40 09 21 fb 54 41 17 44 01 02 03>
b buff =  ArrayBuffer {
  [Uint8Contents]: <64 65 63 6c 61 72 65 20 6d 6f 64 75 6c 65 20 22 61 73 73 65 72 74 22 20 7b 0a 20 20 20 20 66 75 6e 63 74 69 6f 6e 20 61 73 73 65 72 74 28 76 61 6c 75 65 3a 20 61 6e 79 2c 20 6d 65 73 73 61 67 65 3f 3a 20 73 74 72 69 6e 67 20 7c 20 45 72 72 6f 72 29 3a 20 61 73 73 65 72 74 73 20 76 61 6c 75 65 3b 0a ... 8092 more bytes>,
  byteLength: 8192
}
4.2319958073098126e+175

---

b.slice() здесь по-прежнему будет возвращать полную базовую память.

let c = Buffer.alloc(12).fill(b.slice(0,8));
console.log(c.buffer);
let z = new DataView(c.buffer);
console.log(z.getFloat64(0));

print:

ArrayBuffer {
  [Uint8Contents]: <40 09 21 fb 54 41 17 44 40 09 21 fb>,
  byteLength: 12
}
3.1415926535

---

Мои вопросы:

  1. Почему Buffer.from(number[]).buffer производит 8192 байта?
  2. Как получить правильный ArrayBuffer из объекта Buffer.slice без создания новой переменной и allo c (размер)?
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...