Node.js ReadStream Reference

Node.js ReadStream

রিডস্ট্রিম অবজেক্ট

একটি রিডস্ট্রিম হল একটি স্ট্রিম যা আপনাকে একটি সংস্থান থেকে ডেটা পড়তে দেয়। Node.js বিভিন্ন অ্যাপ্লিকেশনের উদ্দেশ্যে ReadStream বাস্তবায়ন প্রদান করে, যেমন ফাইল থেকে পড়া (fs.ReadStream) বা স্ট্যান্ডার্ড ইনপুট (process.stdin) থেকে।

রিডস্ট্রীমগুলি স্ট্রীম বাস্তবায়ন করে৷ পঠনযোগ্য ইন্টারফেস, যার অর্থ তারা অ্যাসিঙ্ক্রোনাসভাবে ডেটা পড়তে, ব্যাকপ্রেশার পরিচালনা করতে এবং বিভিন্ন স্ট্রিম মোড (প্রবাহিত/বিরাম) দিয়ে কাজ করার পদ্ধতি এবং ইভেন্টগুলি সরবরাহ করে৷

fs.ReadStream

ফাইল থেকে পড়ার জন্য

process.stdin

স্ট্যান্ডার্ড ইনপুট থেকে পড়ার জন্য

net.Socket

নেটওয়ার্ক সংযোগ থেকে পড়ার জন্য

সাধারণ রিডস্ট্রিম প্রকার

টাইপ ব্যাখ্যা
fs.ReadStream ফাইল থেকে পড়ার জন্য
process.stdin স্ট্যান্ডার্ড ইনপুট থেকে পড়ার জন্য
net.Socket নেটওয়ার্ক সংযোগ থেকে পড়ার জন্য
http.IncomingMessage HTTP অনুরোধ সংস্থা পড়ার জন্য

রিডস্ট্রিম বৈশিষ্ট্য

Node.js ReadStream , fs.ReadStream :

বৈশিষ্ট্য ব্যাখ্যা
readStream.bytesRead এ পর্যন্ত পড়া বাইট সংখ্যা
readStream.path এই ReadStream যে ফাইল পাথটি পড়ে (শুধুমাত্র fs.ReadStream)
readStream.pending সত্য হলে, অন্তর্নিহিত ফাইলটি এখনও খোলা হয়নি
readStream.readableHighWaterMark এই Readstream এর জন্য highWaterMark মান প্রদান করে
readStream.readableLength পড়ার জন্য প্রস্তুত পঠিত সারিতে বাইটের সংখ্যা (বা বস্তু) প্রদান করে
readStream.readableEnded 'শেষ' ইভেন্ট ফায়ার করা হলে সত্য ফিরে আসে
readStream.readableFlowing রিডস্ট্রিমের অবস্থা নির্দেশ করে (নাল, মিথ্যা বা সত্য)।
readStream.destroyed স্ট্রীম ধ্বংস হয়েছে কিনা নির্দেশ করে

রিডস্ট্রিম পদ্ধতি

রিডস্ট্রিম অবজেক্টে উপলব্ধ সবচেয়ে গুরুত্বপূর্ণ পদ্ধতিগুলি এখানে রয়েছে:

পদ্ধতি ব্যাখ্যা
readStream.read([size]) অভ্যন্তরীণ বাফার থেকে ডেটা পড়ে। ডেটা উপলব্ধ না হলে, নাল ফেরত দেওয়া হয়। আকার নির্দিষ্ট করা হলে, বাইট সংখ্যা পড়ার চেষ্টা করে
readStream.pause() স্ট্রীমকে প্রবাহিত মোড থেকে বের করে নিয়ে ডেটা পড়ার বিরতি দেয়
readStream.resume() পজ() কলের পরে পড়া চালিয়ে যান, স্ট্রীমটিকে প্রবাহিত মোডে স্যুইচ করে
readStream.pipe(destination[, options]) একটি রিডস্ট্রিমের সাথে একটি লেখার যোগ্য স্ট্রীম আবদ্ধ করে, স্বয়ংক্রিয়ভাবে প্রবাহ পরিচালনা করে যাতে গন্তব্যটি একটি দ্রুত রিডস্ট্রিম দ্বারা অভিভূত না হয়৷
readStream.unpipe([destination]) পাইপ() ব্যবহার করে পূর্বে সংযুক্ত লেখার যোগ্য স্ট্রীম সংযোগ বিচ্ছিন্ন করে
readStream.unshift(chunk[, encoding]) পরবর্তী read() কলের মাধ্যমে ফেরত দেওয়ার জন্য অভ্যন্তরীণ বাফারে ডেটার একটি অংশ পুশ করে
readStream.wrap(stream) একটি পুরানো-শৈলী পঠনযোগ্য স্ট্রীমকে একটি নতুন-শৈলীর পাঠযোগ্য স্ট্রীমে মোড়ানো
readStream.destroy([error]) স্ট্রীম সাফ করে, এবং ঐচ্ছিকভাবে একটি ত্রুটি ইভেন্ট নির্গত করে। এই কলের পরে, ReadStream ব্যবহার করা যাবে না
readStream.setEncoding(encoding) স্ট্রীম থেকে পঠিত ডেটার জন্য অক্ষর এনকোডিং সেট করে। সেট করা থাকলে, স্ট্রিমটি বাফার অবজেক্টের পরিবর্তে স্ট্রিং হিসাবে ডেটা ডিকোড করবে

রিডস্ট্রিম ইভেন্ট

রিডস্ট্রিম অবজেক্টগুলি নিম্নলিখিত ইভেন্টগুলি নির্গত করে:

ঘটনা ব্যাখ্যা
'close' স্ট্রীম এবং এর যেকোন অন্তর্নিহিত সংস্থান বন্ধ হয়ে গেলে মুক্তি পায়
'data' স্ট্রীম থেকে পড়ার জন্য ডেটা উপলব্ধ হলে নির্গত হয়। সেট এনকোডিং() এর সাথে এনকোডিং সেটের উপর নির্ভর করে ডেটা হয় একটি বাফার বা একটি স্ট্রিং হবে
'end' স্ট্রীম থেকে ব্যবহার করার জন্য আর কোনো ডেটা না থাকলে নির্গত হয়
'error' পড়ার সময় কোনো ত্রুটি ঘটলে ইস্যু করা হয়। এই ইভেন্টের পরে স্ট্রীম বন্ধ হয়ে যাবে
'open' যখন অন্তর্নিহিত সম্পদ (যেমন, ফাইল বর্ণনাকারী) খোলা হয় তখন প্রকাশিত হয় (fs.ReadStream-এর জন্য নির্দিষ্ট)
'readable' স্ট্রীম থেকে পড়ার জন্য ডেটা পাওয়া গেলে বা স্ট্রিমের শেষের দিকে পৌঁছালে নির্গত হয়
'ready' স্ট্রীম ব্যবহারের জন্য প্রস্তুত হলে মুক্তি
'pause' স্ট্রীম পজ করা হলে নির্গত হয়
'resume' স্ট্রীম পুনরায় চালু হলে নির্গত হয়

একটি ফাইল থেকে পড়া

এই উদাহরণটি দেখায় কিভাবে একটি ফাইল ReadStream তৈরি করতে হয় এবং এটি থেকে ডেটা পড়তে হয়:

const fs = প্রয়োজন('fs'); const path = require('path'); // উদাহরণের জন্য একটি নমুনা ফাইল তৈরি করুন const sampleFile = path.join(__dirname, 'readstream-example.txt'); fs.writeFileSync(sampleFile, 'এটি একটি টেস্ট ফাইল।\nএটির একাধিক লাইন রয়েছে।\nপ্রতিটি লাইনের নিজস্ব বিষয়বস্তু রয়েছে।\nস্ট্রিমিং ফাইল পড়াকে দক্ষ করে তোলে।'); // ফাইল থেকে পড়ার জন্য একটি রিডস্ট্রিম তৈরি করুন const readStream = fs.createReadStream(sampleFile, { // বিকল্প এনকোডিং: 'utf8', // সেট এনকোডিং (utf8, ascii, বাইনারি, ইত্যাদি) highWaterMark: 64, // বাফার আকার বাইটে autoClose: true // স্ট্রীম শেষ হলে স্বয়ংক্রিয়ভাবে ফাইল বর্ণনাকারী বন্ধ করুন }); console.log('ফাইল রিডস্ট্রিম বৈশিষ্ট্য:'); console.log(`- পথ: ${readStream.path}`); console.log(`- মুলতুবি: ${readStream.pending}`); console.log(`- হাই ওয়াটার মার্ক: ${readStream.readableHighWaterMark} বাইটস`); // স্ট্রিম ইভেন্টগুলি পরিচালনা করতে readStream.on('open', (fd) => { console.log(`ফাইল বর্ণনাকারীর সাথে খোলা হয়েছে: ${fd}`); }); readStream.on('তৈরি', () => { console.log('রিডস্ট্রিম প্রস্তুত'); }); // ডেটা ইভেন্টগুলি পরিচালনা করুন readStream.on('ডেটা', (খণ্ড) => { console.log('\nপ্রাপ্ত খণ্ড:'); console.log('-'.রিপিট(20)); console.log(খণ্ড); console.log('-'.রিপিট(20)); console.log(`এখন পর্যন্ত পড়া বাইট: ${readStream.bytesRead}`); }); readStream.on('end', () => { console.log('\nফাইলের শেষে পৌঁছেছে'); console.log(`মোট বাইট রিড: ${readStream.bytesRead}`); // নমুনা ফাইল পরিষ্কার করুন fs.unlinkSync(sampleFile); console.log('নমুনা ফাইল সরানো'); }); readStream.on('close', () => { console.log('স্ট্রিম বন্ধ'); }); readStream.on('error', (err) => { console.error(`ত্রুটি: ${err.message}`); });

স্ট্রিম প্রবাহ নিয়ন্ত্রণ

এই উদাহরণটি দেখায় কিভাবে pause() এবং resume() দিয়ে ডেটার প্রবাহ নিয়ন্ত্রণ করতে হয়:

const fs = প্রয়োজন('fs'); const path = require('path'); // প্রবাহ নিয়ন্ত্রণ উদাহরণের জন্য একটি বড় নমুনা ফাইল তৈরি করুন const flowFile = path.join(__dirname, 'flow-control-example.txt'); যাক নমুনা বিষয়বস্তু = ''; জন্য (আলো i = 1; i <= 1000; i++) { sampleContent += `এটি পরীক্ষার ফাইলের ${i} লাইন।\n`; } fs.writeFileSync(flowFile, sampleContent); // একটি রিডস্ট্রিম তৈরি করুন const readStream = fs.createReadStream(flowFile, { এনকোডিং: 'utf8', হাইওয়াটারমার্ক: 1024 // 1KB বাফার }); যাক chunkCount = 0; যাক মোটবাইট = 0; let isPaused = মিথ্যা; // প্রবাহ নিয়ন্ত্রণের সাথে ডেটার খণ্ডগুলি পরিচালনা করতে readStream.on('ডেটা', (খণ্ড) => { chunkCount++; totalBytes += chunk.length; console.log(`খণ্ড #${chunkCount} প্রাপ্ত, আকার: ${chunk.length} bytes`); // প্রবাহ নিয়ন্ত্রণ প্রদর্শন করতে প্রতি 5 খণ্ডে স্ট্রীমটি থামান যদি (chunkCount % 5 === 0 && ! is Paused) { console.log('\n1 সেকেন্ডের জন্য স্ট্রিম থামানো হচ্ছে...'); isPaused = true; // প্রবাহ থামান readStream.pause(); // 1 সেকেন্ড পরে পুনরায় শুরু করুন setTimeout(() => { console.log('স্ট্রিম পুনরায় শুরু করা হচ্ছে...\n'); isPaused = মিথ্যা; readStream.resume(); }, 1000); } }); readStream.on('end', () => { console.log(`\nফাইল পড়া শেষ। ${chunkCount} খণ্ড, ${totalBytes} মোট বাইট।`); // নমুনা ফাইল পরিষ্কার করুন fs.unlinkSync(flowFile); console.log('নমুনা ফাইল সরানো'); }); readStream.on('error', (err) => { console.error(`ত্রুটি: ${err.message}`); });

read() পদ্ধতি ব্যবহার করে

এই উদাহরণটি 'পঠনযোগ্য' উদাহরণে read() পদ্ধতি ব্যবহার করে দেখায়:

const fs = প্রয়োজন('fs'); const path = require('path'); // একটি নমুনা ফাইল তৈরি করুন const readableFile = path.join(__dirname, 'readable-example.txt'); fs.writeFileSync(পঠনযোগ্য ফাইল, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'.রিপিট(100)); // স্বয়ংক্রিয়ভাবে প্রবাহিত ছাড়াই একটি রিডস্ট্রিম তৈরি করুন const readStream = fs.createReadStream(readableFile, { highWaterMark: 32 // একাধিক রিডিং প্রদর্শনের জন্য ছোট বাফার }); console.log('পঠনযোগ্য ইভেন্ট ব্যবহার করে এবং read() পদ্ধতি:'); // ম্যানুয়াল পড়ার জন্য 'পঠনযোগ্য' ইভেন্ট ব্যবহার করা readStream.on('পাঠযোগ্য', () => { যাক খণ্ড; পড়ার জন্য আর কোনো ডেটা না থাকলে // read() শূন্য দেয় যখন (শূন্য !== (খণ্ড = readStream.read(16))) { console.log(`${chunk.length} বাইট পড়ুন: ${chunk.toString('utf8').substring(0, 10)}...`); } }); readStream.on('end', () => { console.log('প্রবাহের শেষে পৌঁছেছে'); // নমুনা ফাইল পরিষ্কার করুন fs.unlinkSync(পঠনযোগ্য ফাইল); console.log('নমুনা ফাইল সরানো'); }); readStream.on('error', (err) => { console.error(`ত্রুটি: ${err.message}`); });

স্ট্রীম মধ্যে পাইপিং

এই উদাহরণটি দেখায় যে কীভাবে একটি রিডস্ট্রিম থেকে পাইপ() ব্যবহার করে একটি রাইটস্ট্রিমে ডেটা পাস করতে হয়:

const fs = প্রয়োজন('fs'); const path = require('path'); const zlib = require('zlib'); // উৎস এবং গন্তব্য ফাইল পাথ const sourceFile = path.join(__dirname, 'pipe-source-example.txt'); const destFile = path.join(__dirname, 'pipe-destination.txt'); const compressedFile = path.join(__dirname, 'pipe-compressed.gz'); // নমুনা সামগ্রী তৈরি করুন fs.writeFileSync(sourceFile, 'এটি পাইপ উদাহরণের জন্য উৎস বিষয়বস্তু।\n'.repeat(100)); // একটি রিডস্ট্রিম এবং বিভিন্ন রাইটস্ট্রিম তৈরি করুন const readStream = fs.createReadStream(sourceFile); const writeStream = fs.createWriteStream(destFile); const compressStream = zlib.createGzip(); // বিমূর্ত রূপান্তর প্রবাহ const compressedWriteStream = fs.createWriteStream(compressedFile); // রিডস্ট্রিমটি সরাসরি রাইটস্ট্রিমে পাইপ করুন readStream.pipe(writeStream); // সমাপ্তির ইভেন্টের জন্য শুনুন writeStream.on('finish', () => { console.log(`ফাইল ${sourceFile} থেকে ${destFile}`-এ কপি করা হয়েছে); // ক্রমাগত পাইপ প্রদর্শন করতে একটি নতুন রিডস্ট্রিম তৈরি করুন const readStream2 = fs.createReadStream(sourceFile); // একাধিক পাইপ সংযুক্ত করুন: পড়ুন -> কম্প্রেস -> লিখুন readStream2.pipe(compressedstream).pipe(compressedWriteStream); compressedWriteStream.on('finish', () => { console.log(`ফাইল ${sourceFile} থেকে ${compressedFile}` পর্যন্ত সংকুচিত হয়েছে); // ফাইলের আকার তুলনা করুন const originalSize = fs.statSync(sourceFile).size; const compressedSize = fs.statSync(compressedFile).size; console.log(`মূল আকার: ${originalSize} বাইট`); console.log(`সংকুচিত আকার: ${compressedSize} বাইট`); console.log(`কম্প্রেশন অনুপাত: ${(compressedSize / originalSize * 100).toFixed(2)}%`); // প্রমাণের পরে ফাইলগুলি পরিষ্কার করুন [sourceFile, destFile, compressedFile].forEach(file => { fs.unlinkSync(ফাইল); }); console.log('সমস্ত নমুনা ফাইল মুছে ফেলা হয়েছে'); }); }); // ত্রুটিগুলি পরিচালনা করতে readStream.on('error', (err) => console.error(`Read error: ${err.message}`)); writeStream.on('error', (err) => console.error(`ত্রুটি লিখুন: ${err.message}`)); compressStream.on('error', (err) => console.error(`কম্প্রেশন ত্রুটি: ${err.message}`)); compressedWriteStream.on('error', (err) => console.error(`সংকুচিত লেখার ত্রুটি: ${err.message}`));

স্ট্যান্ডার্ড ইনপুট থেকে পড়া

এই উদাহরণটি দেখায় কিভাবে process.stdin ReadStream ব্যবহার করতে হয়:

// process.stdin একটি রিডস্ট্রিম console.log('কিছু পাঠ্য লিখুন (ইনপুট শেষ করতে Ctrl+D বা Ctrl+C টিপুন):'); // বাফার অবজেক্টের পরিবর্তে স্ট্রিং পেতে utf8 এ এনকোডিং সেট করুন process.stdin.setEncoding('utf8'); let inputData = ''; // stdin থেকে ডেটা পরিচালনা করতে process.stdin.on('ডেটা', (খণ্ড) => { console.log(`প্রাপ্ত খণ্ড: "${chunk.trim()}"`); inputData += খণ্ড; }); // ইনপুটের ফলাফল পরিচালনা করতে process.stdin.on('end', () => { console.log('\nইনপুটের শেষ।'); console.log(`মোট ইনপুট প্রাপ্ত: ${inputData.length} অক্ষর'); console.log('আপনি প্রবেশ করেছেন:'); console.log('-'.রিপিট(20)); console.log(inputData); console.log('-'.রিপিট(20)); }); // পরিচালনা করতে Ctrl+C (SIGINT)। process.on('SIGINT', () => { console.log('\nCtrl+C' দিয়ে ইনপুট বাধাপ্রাপ্ত); process.exit(); }); // দ্রষ্টব্য: এই উদাহরণের জন্য একটি টার্মিনালে ব্যবহারকারীর ইনপুট প্রয়োজন // W3Schools TryIt সম্পাদকে কার্যকরভাবে প্রদর্শন করতে পারে না

HTTP রিডস্ট্রিম উদাহরণ

এই উদাহরণটি দেখায় কিভাবে HTTP অনুরোধ ডেটা পরিচালনা করতে একটি ReadStream ব্যবহার করতে হয়:

const http = প্রয়োজন('http'); // একটি HTTP সার্ভার তৈরি করুন const সার্ভার = http.createServer((req, res) => { // req হল একটি http.IncomingMessage, যা একটি ReadStream console.log(${req.url}`-এর কাছে ${req.method} অনুরোধ গৃহীত হয়েছে); // প্রতিক্রিয়া শিরোনাম সেট করুন res.setHeader('কন্টেন্ট-টাইপ', 'টেক্সট/প্লেইন'); // বিভিন্ন ধরণের অনুরোধ পরিচালনা করতে যদি (req.method === 'GET') { res.end('রিডস্ট্রিম অ্যাকশনে দেখতে একটি বডির সাথে একটি POST অনুরোধ পাঠান'); } অন্যথায় যদি (req.method === 'পোস্ট') { // অনুরোধ স্ট্রীমের জন্য এনকোডিং সেট করুন req.setEncoding('utf8'); let body = ''; // অনুরোধ স্ট্রীম থেকে ডেটা ইভেন্ট পরিচালনা করতে req.on('data', (chunk) => { console.log(`${chunk.length} বাইটের খণ্ড প্রাপ্ত হয়েছে`); শরীর += খণ্ড; // একটি সাধারণ বন্যা সুরক্ষা প্রয়োগ করুন যদি (body.length > 1e6) { // শরীর খুব বড় হলে, স্রোত ধ্বংস করুন body = ''; res.writeHead(413, {'Content-Type': 'text/plain'}); res.end('রিকোয়েস্ট এন্টিটি খুব বড়'); req.destroy(); } }); // অনুরোধ স্ট্রীমের ফলাফল পরিচালনা করতে req.on('end', () => { console.log('অনুরোধের ডেটা শেষ'); চেষ্টা করুন { // JSON-এ পার্স করার চেষ্টা const data = JSON.parse(body); console.log('পার্সড JSON ডেটা:', ডেটা); // একটি প্রতিক্রিয়া পাঠান res.writeHead(200, {'Content-Type': 'application/json'}); res.end(JSON.stringify({ বার্তা: 'ডেটা গৃহীত', আকার: শরীরের দৈর্ঘ্য, ডেটা: ডেটা })); } ধরা (ই) { // বৈধ JSON না হলে, কাঁচা ডেটা ইকো ব্যাক করুন console.log('JSON হিসাবে পার্স করা যায়নি, প্লেইন টেক্সট হিসাবে আচরণ করা'); res.writeHead(200, {'Content-Type': 'text/plain'}); res.end(`প্রাপ্ত ${body.length} বাইট ডেটা:\n${body}`); } }); } অন্য { // অন্যান্য HTTP পদ্ধতির জন্য res.writeHead(405, {'Content-Type': 'text/plain'}); res.end('পদ্ধতি অনুমোদিত নয়'); } }); // সার্ভার শুরু করুন const PORT = 8080; server.listen(PORT, () => { console.log(`HTTP রিডস্ট্রিম উদাহরণ সার্ভার http://localhost:${PORT}` এ চলছে); console.log('পরীক্ষা করতে:'); console.log(`1. GET অনুরোধের জন্য একটি ব্রাউজারে http://localhost:${PORT} খুলুন'); console.log(`2. http://localhost:${PORT}`-এ বডি সহ POST অনুরোধ পাঠাতে কার্ল বা পোস্টম্যান ব্যবহার করুন); }); // দ্রষ্টব্য: কার্ল দিয়ে পরীক্ষা করতে: // curl -X POST -H "Content-Type: application/json" -d '{"name":"John","age":30}' http://localhost:8080

ReadStreams এর সাথে পরিচালনার ত্রুটি৷

এই উদাহরণটি রিডস্ট্রিমগুলির সাথে সঠিক ত্রুটি পরিচালনা করে:

const fs = প্রয়োজন('fs'); const path = require('path'); // একটি ফাংশন যা সঠিক ত্রুটি হ্যান্ডলিং সহ একটি ReadStream তৈরি এবং পরিচালনা করে ফাংশন readWithErrorHandling(filePath) { console.log(`পড়ার চেষ্টা করা হচ্ছে: ${filePath}`); // রিডস্ট্রিম তৈরি করুন const readStream = fs.createReadStream(filePath); // ফলাফল বা ত্রুটি ধরার প্রতিশ্রুতি সেট করুন ফেরত নতুন প্রতিশ্রুতি((সমাধান, প্রত্যাখ্যান) => { let data = ''; // ডেটা ইভেন্টগুলি পরিচালনা করুন readStream.on('ডেটা', (খণ্ড) => { ডেটা += খণ্ড; }); // সফল সমাপ্তি পরিচালনা করতে readStream.on('end', () => { console.log(${filePath}` থেকে ${readStream.bytesRead} বাইট সফলভাবে পড়ুন); সমাধান (ডেটা); }); // ত্রুটিগুলি পরিচালনা করতে readStream.on('error', (err) => { console.error(`${filePath} পড়ার ত্রুটি: ${err.message}`); প্রত্যাখ্যান (ভ্রান্তি); }); // স্ট্রীম বন্ধ (একটি ত্রুটি থাকলেও সর্বদা ঘটবে) readStream.on('close', () => { console.log(`${filePath} বন্ধের জন্য স্ট্রিম`); }); }); } // বিদ্যমান এবং অ-বিদ্যমান উভয় ফাইলের সাথে পরীক্ষা করুন const existFile = path.join(__dirname, 'test-existing.txt'); const nonExistingFile = path.join(__dirname, 'non-existing-file.txt'); // টেস্ট ফাইল তৈরি করুন fs.writeFileSync(বিদ্যমান ফাইল, 'এটি ত্রুটি পরিচালনার উদাহরণের জন্য পরীক্ষার বিষয়বস্তু'); // উদাহরণ 1: একটি বিদ্যমান ফাইল পড়া console.log('উদাহরণ 1: একটি বিদ্যমান ফাইল পড়া'); ReadWithErrorHandling(বিদ্যমান ফাইল) তারপর (ডেটা => { console.log('ফাইল বিষয়বস্তু:', ডেটা); // উদাহরণ 2: বিদ্যমান নেই এমন একটি ফাইল পড়া console.log('\nউদাহরণ 2: একটি অ-বিদ্যমান ফাইল পড়া'); রিটার্ন readWithErrorHandling(nonExistingFile); }) .catch(err => { console.log('প্রোমিস ক্যাচ-এ ত্রুটি ধরা পড়েছে:', err.message); }) অবশেষে(() => { // পরীক্ষার ফাইলটি পরিষ্কার করুন যদি (fs.existsSync(existingFile)) { fs.unlinkSync(বিদ্যমান ফাইল); console.log('টেস্ট ফাইল সরানো'); } }); // উদাহরণ 3: ধ্বংসপ্রাপ্ত স্ট্রীম প্রমাণ করা console.log('\nউদাহরণ 3: ধ্বংস হওয়া স্ট্রীম প্রদর্শন করা'); const DestroyTestFile = path.join(__dirname, 'destroy-test.txt'); fs.writeFileSync(destroyTestFile, 'A'.repeat(10000)); const DestroyStream = fs.createReadStream(destroyTestFile); DestroyStream.on('data', (chunk) => { console.log(`প্রবাহটি ধ্বংস করার আগে ${chunk.length} বাইট প্রাপ্ত হয়েছে`); // প্রথম খণ্ডটি পাওয়ার পরে স্ট্রিমটি সাফ করুন console.log('ইচ্ছাকৃতভাবে স্ট্রিম ধ্বংস করা'); DestroyStream.destroy(নতুন ত্রুটি('স্ট্রিম ম্যানুয়ালি ধ্বংস')); }); DestroyStream.on('error', (err) => { console.error(`ধ্বংস ত্রুটি: ${err.message}`); }); DestroyStream.on('close', () => { console.log('নষ্ট প্রবাহ বন্ধ'); // পরিষ্কার করুন fs.unlinkSync(destroyTestFile); console.log('পরীক্ষা ফাইল মুছে ফেলা'); });

রিডস্ট্রিমের জন্য সর্বোত্তম অনুশীলন

Node.js ReadStreams , :

সর্বদা ত্রুটিগুলি পরিচালনা করুন:অ-হ্যান্ডেল করা ব্যতিক্রমগুলি প্রতিরোধ করতে ReadStreams থেকে সর্বদা 'ত্রুটি' ইভেন্টগুলি শুনুন এবং পরিচালনা করুন
সম্পদ পরিষ্কার করুন:নিশ্চিত করুন যে স্ট্রীমগুলি সঠিকভাবে বন্ধ বা ধ্বংস হয়েছে যখন আর প্রয়োজন নেই
বেশিরভাগ ক্ষেত্রে পাইপ() ব্যবহার করুন:পাইপ() পদ্ধতি স্বয়ংক্রিয়ভাবে ব্যাকপ্রেশার পরিচালনা করে এবং সাধারণত স্ট্রিমগুলিকে একত্রিত করার সর্বোত্তম উপায়
উপযুক্ত বাফার আকার সেট করুন:মেমরি ব্যবহার নিয়ন্ত্রণ করতে হাইওয়াটারমার্ক বিকল্পটি ব্যবহার করুন, বিশেষত বড় ফাইলগুলির জন্য
সঠিক মোড নির্বাচন করুন:প্রবাহিত এবং বিরতি দেওয়া মোডের মধ্যে পার্থক্য বুঝুন এবং আপনার উদ্দেশ্য ব্যবহারের জন্য উপযুক্ত একটি ব্যবহার করুন
এনকোডিং বিবেচনা করুন:আপনি যদি টেক্সট নিয়ে কাজ করেন তাহলে setEncoding() এর সাথে উপযুক্ত এনকোডিং সেট করুন
stream.finished() :ক্লিনআপের জন্য, স্ট্রীম মডিউল থেকে stream.finished() পরীক্ষা করে দেখুন স্ট্রীমটি আর পঠনযোগ্য বা লেখার যোগ্য নয়, বা কোন ত্রুটির সম্মুখীন হয়েছে বা অকাল বন্ধ হয়েছে কিনা।
মেমরিতে সম্পূর্ণ ফাইল পড়া এড়িয়ে চলুন:মেমরি সমস্যা এড়াতে বড় ফাইলের জন্য fs.readFile() এর মত পদ্ধতির পরিবর্তে স্ট্রিম ব্যবহার করুন

অনুশীলন করুন

Node.js ReadStream .

fs.ReadFile
✗ ভুল! "fs.ReadFile" একটি স্ট্রিম নয়, এটি একটি পদ্ধতি
fs.ReadStream
✓ ঠিক আছে! "fs.ReadStream" হল একটি বৈধ ReadStream প্রকার যা Node.js-এ ফাইল থেকে ডেটা পড়ার জন্য ব্যবহৃত হয়
fs.FileReader
✗ ভুল! "fs.FileReader" Node.js-এ একটি বৈধ প্রকার নয়
fs.StreamReader
✗ ভুল! "fs.StreamReader" Node.js-এ একটি বৈধ প্রকার নয়