JavaScript хорош в обработке строк, но поскольку он был первоначально разработан для обработки документов HTML, он не очень хорош в обработке бинарных данных. JavaScript не имеет типа байта, нет структурированных типов и даже массивов байтов, только числа и строки. (Оригинальный текст: JavaScript не имеет типа байта - он просто имеет цифры - или структурированные типы, или http://skylitecellars.com/ даже байтовые массивы: у него просто есть строки.)
Поскольку узел основан на JavaScript, он может естественным образом обрабатывать текстовые протоколы, такие как HTTP, но вы также можете использовать его для взаимодействия с базами данных, обработчиками или загрузки файлов и т. Д. Это возможно, насколько сложно делать эти вещи с помощью просто строк. Ранее Node обрабатывал бинарные данные, кодируя байт в текстовые символы, но этот метод позже оказался невозможным, тратя ресурсы, медленные, негибкие и трудно поддерживать.
Узел имеет буфер реализации бинарного буфера. Этот псевдо-класс предоставляет ряд API для обработки бинарных данных, упрощающих задачи, которые требуют обработки двоичных данных. Длина буфера определяется длиной данных байта, и вы можете случайным образом установить и получить данные байта в буфере.
Примечание: класс буфера занимает особое место. Память, занятая данными байтов в буфере, не выделяется в JavasCRP.
Это VM Memory Heap, то есть эти объекты не будут обработаны алгоритмом сбора мусора JavaScript и будут заменены постоянным адресом памяти, который не будет изменен, что также избегает отходов ЦП, вызванных копированием памяти буферизованного контента.
Создать буфер
Вы можете создать буфер со строкой UTF-8, как это:
Кода -копия выглядит следующим образом:
var buf = new Buffer ('Hello World!');
Вы также можете создать буфер с указанной кодировкой:
Кода -копия выглядит следующим образом:
var buf = новый буфер ('8b76fde713ce', 'base64');
Приемлемое кодирование и идентификация символов следующие:
1.ASCI-ASCI, применимо только к наборам символов ASCII.
2.UTF8-UTF-8, это кодирование по всей переменной подходит для любого символа в наборе символов Unicode. Он стал предпочтительным кодированием в веб -мире, а также является типом кодирования по умолчанию узла.
3.Base64 - Base64, эта кодировка основана на 64 печатных символах ASCII для представления двоичных данных. Base64 обычно используется для внедрения бинарных данных, которые могут быть преобразованы в строки в документ символов, и могут быть преобразованы обратно в исходный бинарный формат нетронутым и без потерь при необходимости.
Если нет данных для инициализации буфера, вы можете создать пустой буфер с указанным размером емкости:
Кода -копия выглядит следующим образом:
var buf = новый буфер (1024); // Создать 1024-байтовый буфер
Получить и установить буферные данные
После создания или получения забуференного объекта вы можете просмотреть или изменить его содержимое. Вы можете получить доступ к определенному байту буфера через оператор []:
Кода -копия выглядит следующим образом:
var buf = new Buffer ('My Buffer Content');
// Доступ к 10 -м байту в буфере
console.log (buf [10]); // -> 99
ПРИМЕЧАНИЕ. При создании инициализированного буфера (с использованием размера буферной емкости) обязательно отметьте, что буферированные данные не инициализируются до 0, а являются случайными данными.
Кода -копия выглядит следующим образом:
var buf = новый буфер (1024);
console.log (buf [100]); // -> 5 (некоторое случайное значение)
Вы можете изменить данные в любом месте буфера, как это:
Кода -копия выглядит следующим образом:
BUF [99] = 125; // Установить значение 100 -го байта до 125
Примечание. В некоторых случаях некоторые буферные операции не производят ошибки, такие как:
1. Максимальное значение байтов в буфере составляет 255. Если байту присваивается число больше 256, он будет модулирован с помощью 256, а затем назначить результат этому байту.
2. Если забуференный байт назначен на 256, его фактическое значение составит 0 (Примечание переводчика: он фактически повторяется с первым, 256%256 = 0)
3. Если вы используете номер с плавающей запятой, чтобы назначить значение байту в буфере, например, 100,7, фактическим значением будет целочисленной частью номера плавающей точки - 100
4. Если вы попытаетесь присвоить значение позиции, которая превышает емкость буфера, операция назначения потерпит неудачу, а буфер не будет изменен.
Вы можете использовать атрибут длины, чтобы получить длину буфера:
Кода -копия выглядит следующим образом:
var buf = новый буфер (100);
console.log (buf.length); // -> 100
Вы также можете итерации над буферизованным содержимым, используя длину буфера для чтения или установки каждого байта:
Кода -копия выглядит следующим образом:
var buf = новый буфер (100);
for (var i = 0; i <buf.length; i ++) {
buf [i] = i;
}
Приведенный выше код создает новый буфер, содержащий 100 байтов и устанавливает каждый байт в буфере от 0 до 99.
Среза буферированные данные
После того, как буфер создается или получен, вам может потребоваться извлечь часть буферированных данных. Вы можете разделить существующий буфер, указав начальную позицию, чтобы создать еще один меньший буфер:
Кода -копия выглядит следующим образом:
var buffer = new Buffer («Это содержание моего буфера»);
var minderbuffer = buffer.slice (8, 19);
console.log (minderbuffer.toString ()); // -> "Контент"
Обратите внимание, что при разделении буфера не выделяется или копирована новая память. Новый буфер использует родительскую буферную память, которая является лишь ссылкой на определенную часть данных (указанную в начальной позиции). Этот отрывок имеет несколько значений.
Во -первых, если ваша программа изменяет содержимое родительского буфера, эти модификации также повлияют на соответствующие детские буферы, потому что родительский буфер и детский буфер являются разными объектами JavaScript, поэтому легко игнорировать эту проблему и привести к некоторым потенциальным ошибкам.
Во -вторых, когда вы создаете меньший дочерний буфер из родительского буфера таким образом, родительский буферный объект все еще будет сохраняться после завершения операции и не будет собирать мусор. Если вы не будете осторожны, это легко вызовет утечку памяти.
Примечание. Если вы беспокоитесь о утечке памяти, вы можете использовать метод копирования вместо работы среза. Следующее введет копию.
Копировать буферизованные данные
Вы можете использовать копию для копирования части буфера в другой буфер, как это:
Кода -копия выглядит следующим образом:
var buffer1 = новый буфер («Это содержание моего буфера»);
var buffer2 = новый буфер (11);
var targetStart = 0;
var sourcestart = 8;
var SourceEnd = 19;
Buffer1.copy (Buffer2, TargetStart, Sourcestart, SourceEnd);
console.log (buffer2.toString ()); // -> "Контент"
В приведенном выше коде скопируйте 9 -й -20 -й байт буфера исходного исходного буфера в начальную позицию целевого буфера.
Декодировать буферизованные данные
Забуференные данные могут быть преобразованы в строку UTF-8, как это:
Кода -копия выглядит следующим образом:
var str = buf.toString ();
Забуференные данные также могут быть декодированы в любые данные типа кодирования, указав тип кодирования. Например, если вы хотите декодировать буфер в строку Base64, вы можете сделать это:
Кода -копия выглядит следующим образом:
var b64str = buf.tostring ("base64");
Используя функцию ToString, вы также можете транслировать строку UTF-8 в строку BASE64:
Кода -копия выглядит следующим образом:
var utf8string = 'my String';
var buf = новый буфер (UTF8String);
var base64string = buf.tostring ('base64')
краткое содержание
Иногда вам приходится иметь дело с бинарными данными, но у нативного JavaScript нет четкого способа сделать это, поэтому узел обеспечивает класс буфера, который инкапсулирует некоторые операции для непрерывных блоков памяти. Вы можете разделить или копировать данные памяти между двумя буферами.
Вы также можете преобразовать буфер в какую -то кодируемую строку или, в свою очередь, преобразовать строку в буфер для доступа или обработки каждого бита.