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();