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

// Define the output file paths
const uncorkedFile = path.join(__dirname, 'uncorked-example.txt');
const corkedFile = path.join(__dirname, 'corked-example.txt');

// Function to run the demonstration
function demonstrateCorkUncork() {
  console.log('Demonstrating cork() and uncork() methods');
  
  // 1. Write without corking
  const uncorkedStream = fs.createWriteStream(uncorkedFile);
  
  uncorkedStream.on('finish', () => {
    console.log(`Uncorked stream finished. Bytes written: ${uncorkedStream.bytesWritten}`);
    
    // 2. Now write with corking
    const corkedStream = fs.createWriteStream(corkedFile);
    
    corkedStream.on('finish', () => {
      console.log(`Corked stream finished. Bytes written: ${corkedStream.bytesWritten}`);
      
      // Compare files
      fs.readFile(uncorkedFile, 'utf8', (err, uncorkedData) => {
        if (err) {
          console.error(`Error reading uncorked file: ${err.message}`);
          return;
        }
        
        fs.readFile(corkedFile, 'utf8', (err, corkedData) => {
          if (err) {
            console.error(`Error reading corked file: ${err.message}`);
            return;
          }
          
          console.log('\nFile comparison:');
          console.log(`- Uncorked file size: ${uncorkedData.length} bytes`);
          console.log(`- Corked file size: ${corkedData.length} bytes`);
          console.log(`- Content identical: ${uncorkedData === corkedData}`);
          
          // Clean up sample files
          fs.unlinkSync(uncorkedFile);
          fs.unlinkSync(corkedFile);
          console.log('Sample files removed');
        });
      });
    });
    
    // Start cork operation
    console.log('Writing with cork()...');
    corkedStream.cork();
    
    // Write multiple chunks of data
    for (let i = 0; i < 1000; i++) {
      corkedStream.write(`Line ${i}: This data is being corked.\n`);
    }
    
    // Uncork to flush the buffer
    corkedStream.uncork();
    
    // End the stream
    corkedStream.end();
  });
  
  // Write without corking
  console.log('Writing without cork()...');
  for (let i = 0; i < 1000; i++) {
    uncorkedStream.write(`Line ${i}: This data is not being corked.\n`);
  }
  
  // End the stream
  uncorkedStream.end();
}

// Run the demonstration
demonstrateCorkUncork();

              
Demonstrating cork() and uncork() methods
Writing without cork()...
Writing with cork()...
Uncorked stream finished. Bytes written: 21900
Corked stream finished. Bytes written: 21900

File comparison:
- Uncorked file size: 21900 bytes
- Corked file size: 21900 bytes
- Content identical: true
Sample files removed