Как обернуть буфер как поток Stream2 Читаемый поток?
Как я могу преобразовать буфер node.js в читаемый поток, используя интерфейс stream2?
Я уже нашел этот ответ и модуль stream-buffers, но этот модуль основан на интерфейсе stream1.
3 ответа
С помощью Streamifier вы можете конвертировать строки и буферы в читаемые потоки с новым API потока.
Возможно, самый простой способ - создать новый экземпляр потока PassThrough и просто вставить в него ваши данные. Когда вы передадите его в другие потоки, данные будут извлечены из первого потока.
var stream = require('stream');
// Initiate the source
var bufferStream = new stream.PassThrough();
// Write your buffer
bufferStream.end(new Buffer('Test data.'));
// Pipe it to something else (i.e. stdout)
bufferStream.pipe(process.stdout)
Как предположил natevw, еще более идиоматично использовать stream.PassThrough
, а также end
это с буфером:
var buffer = new Buffer( 'foo' );
var bufferStream = new stream.PassThrough();
bufferStream.end( buffer );
bufferStream.pipe( process.stdout );
Это также, как буферы конвертируются / передаются в винил-фс.
Современный простой подход, который можно использовать везде, где вы бы использовали fs.createReadStream(), но без необходимости сначала записывать файл по пути.
const {Duplex} = require('stream'); // Native Node Module
function bufferToStream(myBuuffer) {
let tmp = new Duplex();
tmp.push(myBuuffer);
tmp.push(null);
return tmp;
}
const myReadableStream = bufferToStream(your_buffer);
- myReadableStream можно использовать повторно.
- Буфер и поток существуют только в памяти без записи в локальное хранилище.
- Я часто использую этот подход, когда фактический файл хранится в каком-то облачном сервисе, а наш API действует как посредник. Файлы никогда не записываются в локальный файл.
- Я обнаружил, что это очень надежно, независимо от буфера (до 10 МБ) или места назначения, которое принимает читаемый поток. Файлы большего размера должны реализовывать