Introduction to first-chunk-stream
Efficient streaming and handling of large data chunks are crucial for performance-optimized Node.js applications. The first-chunk-stream
module allows developers to easily manipulate the first chunk of a stream, providing unique opportunities for data processing and transformation. In this blog post, we will introduce various APIs of first-chunk-stream
and demonstrate their usage through code snippets and a detailed application example.
APIs of first-chunk-stream
Creating a First Chunk Stream
You can create a first chunk stream using the firstChunk
function. It takes a callback function which is invoked with the first chunk of the stream:
const firstChunk = require('first-chunk-stream'); const stream = someReadableStream().pipe(firstChunk({ chunkLength: 10 }, (chunk, enc, cb) => { // Processing the first chunk cb(null, chunk); }));
Modifying the First Chunk
This API allows you to modify the first chunk before passing it to the downstream:
const modifiedStream = someReadableStream().pipe(firstChunk({ chunkLength: 10 }, (chunk, enc, cb) => { const modifiedChunk = Buffer.from('Modified: ' + chunk.toString()); cb(null, modifiedChunk); }));
Add Custom Header to a File Stream
Example of adding a custom header to a file stream using first-chunk-stream:
const fs = require('fs'); const firstChunk = require('first-chunk-stream'); const readStream = fs.createReadStream('input.txt'); const writeStream = fs.createWriteStream('output.txt'); readStream .pipe(firstChunk({ chunkLength: 0 }, (chunk, enc, cb) => { cb(null, Buffer.from('Custom Header\n') + chunk); })) .pipe(writeStream);
Checking Data Format
Check data format such as magic numbers in files:
const firstChunk = require('first-chunk-stream'); someReadableStream() .pipe(firstChunk({ chunkLength: 8 }, (chunk, enc, cb) => { if (chunk.toString('hex', 0, 4) !== '89504e47') { return cb(new Error('Not a PNG file')); } cb(null, chunk); }));
Application Example
Let’s create an example: a simple application that reads a text file, adds a header to it, and writes the result to a new file.
const fs = require('fs'); const firstChunk = require('first-chunk-stream'); const addHeaderToFile = (inputFile, outputFile, header, callback) => { const readStream = fs.createReadStream(inputFile); const writeStream = fs.createWriteStream(outputFile); readStream .pipe(firstChunk({ chunkLength: 0 }, (chunk, enc, cb) => { cb(null, Buffer.from(header + '\n') + chunk); })) .pipe(writeStream) .on('finish', callback); }; addHeaderToFile('input.txt', 'output.txt', 'Custom Header', () => { console.log('Header added successfully'); });
This application reads input.txt
, adds ‘Custom Header’ as the first line, and writes the resulting content to output.txt
.
Hash: 98a1d89ba6d62d3e2b4a50ffd5065928de88461bf0c166a1ce78d76ab7d7d004