Що таке буфери?
Бінарний файл - це просто набір або колекція 1
та 0
. Кожне число в двійковій системі, кожне 1 і 0 у наборі називаються бітами . Комп’ютер перетворює дані у цей двійковий формат для зберігання та виконання операцій. Наприклад, ось п'ять різних двійкових файлів:
10, 01, 001, 1110, 00101011
JavaScript не має даних базового типу в своєму базовому API. Для обробки двійкових даних Node.js включає реалізацію двійкового буфера із загальним модулем Buffer
.
Створення буфера
Існують різні способи створення буфера в Node.js. Ви можете створити порожній буфер розміром 10 байт.
const buf1 = Buffer.alloc(10);
З рядків, закодованих UTF-8, створення виглядає так:
const buf2 = Buffer.from('Hello World!');
При створенні буфера існують різні прийняті кодування:
- ascii
- utf-8
- base64:
- латинська1
- двійковий
- шістнадцятковий
В API буфера виділено три окремі функції для використання та створення нових буферів. У наведених вище прикладах ми бачили alloc()
і from()
. Третім є allocUnsafe()
.
const buf3 = Buffer.allocUnsafe(10);
Після повернення ця функція може містити старі дані, які потрібно перезаписати.
Взаємодія з буфером
Існують різні взаємодії, які можна здійснити за допомогою API буфера. Більшість із них ми розглянемо тут. Почнемо з перетворення буфера в JSON.
let bufferOne = Buffer.from('This is a buffer example.'); console.log(bufferOne); // Output: let json = JSON.stringify(bufferOne); console.log(json); // Output: {"type": "Buffer", "data": [84,104,105,115,32,105,115,32,97,32,98,117,102,102,101,114,32,101,120,97,109,112,108,101,46]}
JSON вказує, що тип об'єкта, що трансформується, - це буфер та його дані. Перетворення порожнього буфера в JSON покаже нам, що він не містить нічого, крім нулів.
const emptyBuf = Buffer.alloc(10); emptyBuf.toJSON(); // Output: { "type": "Buffer", "data": [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ] }
Зауважте, що Buffer API також забезпечує пряму функцію toJSON()
перетворення буфера в об'єкт JSON. Щоб дослідити розмір буфера, ми можемо використовувати length
метод.
emptyBuf.length; // Output: 10
Тепер перетворимо буфер на читабельну рядок, у нашому випадку кодовану utf-8.
console.log(bufferOne.toString('utf8')); // Output: This is a buffer example.
.toString()
за замовчуванням перетворює буфер у рядок формату utf-8. Ось як ви декодуєте буфер. Якщо ви вказали кодування, ви можете перетворити буфер в інше кодування
console.log(bufferOne.toString('base64'));
Більше інформації про буфери:
- Потрібно краще розуміти буфери в Node.js? Перевір це.