Get your own Node server
const fs = require('fs');
const path = require('path');

// Create a sample file for the example
const sampleFile = path.join(__dirname, 'readstream-example.txt');
fs.writeFileSync(sampleFile, 'This is a test file.\nIt has multiple lines.\nEach line has its own content.\nStreaming makes file reading efficient.');

// Create a ReadStream to read from the file
const readStream = fs.createReadStream(sampleFile, {
  // Options
  encoding: 'utf8',   // Set the encoding (utf8, ascii, binary, etc.)
  highWaterMark: 64, // Buffer size in bytes
  autoClose: true     // Automatically close the file descriptor when the stream ends
});

console.log('File ReadStream properties:');
console.log(`- Path: ${readStream.path}`);
console.log(`- Pending: ${readStream.pending}`);
console.log(`- High Water Mark: ${readStream.readableHighWaterMark} bytes`);

// Handle stream events
readStream.on('open', (fd) => {
  console.log(`File opened with descriptor: ${fd}`);
});

readStream.on('ready', () => {
  console.log('ReadStream is ready');
});

// Handle data events
readStream.on('data', (chunk) => {
  console.log('\nReceived chunk:');
  console.log('-'.repeat(20));
  console.log(chunk);
  console.log('-'.repeat(20));
  console.log(`Bytes read so far: ${readStream.bytesRead}`);
});

readStream.on('end', () => {
  console.log('\nReached end of file');
  console.log(`Total bytes read: ${readStream.bytesRead}`);
  
  // Clean up the sample file
  fs.unlinkSync(sampleFile);
  console.log('Sample file removed');
});

readStream.on('close', () => {
  console.log('Stream closed');
});

readStream.on('error', (err) => {
  console.error(`Error: ${err.message}`);
});

              
File ReadStream properties:
- Path: /path/to/readstream-example.txt
- Pending: false
- High Water Mark: 64 bytes
File opened with descriptor: 3
ReadStream is ready

Received chunk:
--------------------
This is a test file.
It has multiple lines.
Ea
--------------------
Bytes read so far: 64

Received chunk:
--------------------
ch line has its own content.
Streaming makes file reading efficient.
--------------------
Bytes read so far: 128

Reached end of file
Total bytes read: 128
Sample file removed
Stream closed