Буферный модуль
JS был первоначально разработан для браузеров, поэтому он может хорошо обрабатывать строки, кодируемые Unicode, но он не может хорошо обрабатывать бинарные данные. Это проблема с node.js, потому что Node.js предназначен для отправки и получения данных, которые часто передаются в двоичном формате в сети. например:
- отправлять и получать данные через TCP -соединение;
- Прочитайте двоичные данные из изображений или сжатых файлов;
- Читать и записать данные из файловой системы;
- Обработка двоичных потоков данных из сети
Буферный модуль привносит метод Node.js для хранения необработанных данных, поэтому двоичные данные могут использоваться в контексте JS. Всякий раз, когда данные перемещены в операциях ввода/вывода необходимо обрабатывать в node.js, можно использовать буферный модуль.
Класс: буфер
Класс буфера - это глобальный тип переменной, используемый для непосредственного обработки двоичных данных. Это может быть построено различными способами.
Необработанные данные сохраняются в экземпляре класса буфера. Экземпляр буфера похож на массив целых чисел.
1.new Buffer (размер): выделить новые 8-битные байты буфера, размер которого равен размеру.
2.new Buffer (массив): назначьте новый буфер для использования 8-битного байтового массива.
3.New Buffer (str, [кодирование]): используется кодирование строки. Что используется метод кодирования, а параметры являются необязательными.
4. Метод класса: buffer.isencoding (кодирование): вернуть True, если заданное кодирование кодирования действителен, в противном случае верните false.
5. Метод класса: Buffer.isbuffer (OBJ): Проверьте, является ли этот OBJ буфером. Возвращает логический
6. Метод класса: buffer.concat (list, [totallength]): список {массив} тип массива, массив буфера, используемый для подключения. Totallength {number} Тип общего размера всех буферов вышеуказанного буферного массива.
В дополнение к чтению файлов для получения экземпляров буфера, он также может быть построен напрямую, например:
Кода -копия выглядит следующим образом:
var bin = новый буфер ([0x48, 0x65, 0x6c, 0x6c, 0x6c]);
Буфер похож на строку. В дополнение к использованию атрибута .length для получения длины байта, вы также можете использовать метод [Index] для чтения байтов в указанном положении, например:
Кода -копия выглядит следующим образом:
bin [0]; // => 0x48;
Буфер и строку могут быть преобразованы друг в друга, например, двоичные данные могут быть преобразованы в строки с использованием указанной кодирования:
Кода -копия выглядит следующим образом:
var str = bin.toString ('utf-8'); // => "Привет"
Вместо возвращения нового буфера метод .slice возвращает указатель в местоположение в середине исходного буфера, как показано ниже.
Кода -копия выглядит следующим образом:
1. [0x48, 0x65, 0x6c, 0x6c, 0x6c]
2. ^ ^
3. | |
4. Bin bin.slice (2)
Напишите в буфер
Кода -копия выглядит следующим образом:
VAR Buffer = новый буфер (8); // Создать буфер с 8 байтами распределенной памяти
console.log (buffer.write ('a', 'utf8')); // выход 1
Это напишет символ «А» в буфер, а узел возвращает количество байтов, записанных в буфер после кодирования. Кодирование UTF-8 буквы A занимает 1 байт.
Копия буфера
Node.js предоставляет метод для копирования всего содержимого буферного объекта в другой буферный объект. Мы можем копировать только между существующими буферными объектами, поэтому мы должны их создать.
Кода -копия выглядит следующим образом:
buffer.copy (buffertocopyto)
Среди них Buffertocopyto является целевым буферным объектом, который будет скопирован. Следующий пример:
Кода -копия выглядит следующим образом:
var buffer1 = новый буфер (8);
buffer1.write («Приятно познакомиться с тобой», «utf8»);
var buffer2 = новый буфер (8);
buffer1.copy (buffer2);
console.log (buffer2.toString ()); // приятно познакомиться с вами
Потоковой модуль
В операционных системах Unix Type потоковая передача является стандартной концепцией. Есть три основных потока следующим образом:
1. Стандартный вход
2. Стандартный выход
3. Стандартные ошибки
Читаемый поток
Если буфер - это способ, которым Node.js обрабатывает необработанные данные, то поток обычно является тем, как node.js перемещает данные. Потоки в node.js читаются или можно записать. Многие модули в node.js используют потоки, включая HTTP и файловые системы.
Предположим, что мы создаем файл Class.txt.txt и читаем из него список имен, чтобы мы могли использовать эти данные. Поскольку данные - это поток, это означает, что до завершения чтения файлов вы можете действовать в соответствии с данными первых нескольких полученных байтов. Это общий шаблон в node.js:
Кода -копия выглядит следующим образом:
var fs = require ('fs');
var stream = fs.readstream ('classmates.txt');
Stream.SetEncoding ('UTF8');
stream.on ('data', function (chunk) {
console.log ('Прочтите некоторые данные')
});
stream.on ('close', function () {
console.log («Все данные читаются»)
});
В приведенном выше примере данные о событии запускаются при получении новых данных. Событие закрытия запускается, когда чтение файла завершено.
Запись по потоку
Очевидно, мы также можем создать записи, который можно записать, для написания данных. Это означает, что простой скрипт можно использовать для чтения в файл, а затем записать в другой файл:
Кода -копия выглядит следующим образом:
var fs = require ('fs');
var pertableStream = fs.readstream ('classmates.txt');
var wriseableStream = fs.writeStream ('names.txt');
readableStream.setEncoding ('UTF8');
readableStream.on ('data', function (chunk) {
wriseableStream.write (Chunk);
});
readableStream.on ('close', function () {
wriseableStream.end ();
});
Теперь, когда получено событие данных, данные записываются в запись для записи.
readable.setencoding (кодирование): return: this
readable.resume (): так же, как и выше. Этот метод позволяет читаемому потоку продолжать запускать событие данных.
readable.pause (): так же, как и выше. Этот метод заставляет поток в режиме потока прекратить запуск события данных, переключаться в режим без потока и оставлять последующие доступные данные во внутреннем буфере.
Класс: stream.writable
Интерфейс потока записи - это абстракция данных, которые вы пишете для цели.
1.Writeble.Write (Chunk, [кодирование], [обратный вызов]):
Chunk {String | Буфер} Данные, которые будут записаны
Кодирование {string} кодирование, если кусок - это строка
обратный вызов {function} обратный вызов после записи блока данных
Return: {boolean} true, если данные были обработаны все.
Этот метод записывает данные в базовую систему и вызывает заданный обратный вызов после обработки данных.
2. whritable.cork (): вынужден ловить все записи.
Застрявшие данные будут записаны при вызове.
3.Writeble.end ([Chunk], [кодирование], [обратный вызов])
Chunk {String | Буфер} необязательные, данные, которые будут записаны
Кодирование {string} кодирование, если кусок - это строка
обратный вызов {function} необязательный, обратный вызов после окончания потока
Вызов write () после вызова End () будет генерировать ошибку.
Кода -копия выглядит следующим образом:
// Напишите «Привет», а потом закончится с «Миром!»
http.createserver (function (req, res) {
res.write («Привет»);
res.end ('мир!');
// теперь не разрешается продолжать писать
});