1. InputStreamReaderক্লাস

স্ট্রীমগুলির আরেকটি আকর্ষণীয় বৈশিষ্ট্য হল যে আপনি একাধিক স্ট্রীমকে একসাথে চেইনে একত্রিত করতে পারেন । একটি স্ট্রীম শুধুমাত্র তার অভ্যন্তরীণ ডেটা উৎস থেকে নয়, অন্য স্ট্রিম থেকেও ডেটা পড়তে পারে ।

এটি জাভাতে একটি অত্যন্ত শক্তিশালী প্রক্রিয়া, যা একটি স্ট্রীমের সাথে অন্য স্ট্রিমকে সংযুক্ত করে জটিল ডেটা পড়ার দৃশ্য তৈরি করা সম্ভব করে তোলে। এই ধরনের একটি স্কিম এই মত দেখায়:

ইনপুটস্ট্রিমরিডার ক্লাস

যখন একটি প্রোগ্রাম একটি ডেটা স্ট্রিম থেকে ডেটা পড়ে, তখন ডেটা স্ট্রীমটি তার ডেটা উত্স থেকে ডেটা পড়ে, যা অন্য ডেটা স্ট্রিম বা একটি ফাইল, উদাহরণস্বরূপ।

আরও কি, প্রতিটি ডেটা স্ট্রীম কেবল ডেটা পড়ে এবং দেয় না, তবে এটিকে রূপান্তর করতে বা এতে বিভিন্ন ক্রিয়াকলাপ সম্পাদন করতে পারে। এই ধরনের একটি "ইন্টারমিডিয়েট স্ট্রিম" এর একটি ভালো উদাহরণ হল InputStreamReaderক্লাস।

আমরা ইতিমধ্যে একটি ক্লাস জানি FileReader- এটি Readerএকটি ফাইল থেকে ডেটা পাঠ করে। এবং InputStreamReaderএর ডেটা কোথা থেকে পাওয়া যায়? এটা ঠিক - একটি থেকে InputStream.

আপনি যখন একটি অবজেক্ট তৈরি করেন , তখন আপনাকে একটি অবজেক্ট বা এর কোনো একটি ডিসেন্ড্যান্ট ক্লাসে InputStreamReaderপাস করতে হবে । InputStreamউদাহরণ:

String src = "c:\\projects\\log.txt";
FileInputStream input = new FileInputStream(src);
InputStreamReader reader = new InputStreamReader(input);

ক্লাসে ক্লাসের InputStreamReaderসমস্ত পদ্ধতি রয়েছে Readerএবং তারা ঠিক একইভাবে কাজ করে।

ক্লাসের মধ্যে প্রধান পার্থক্য InputStreamReaderএবং, বলুন, FileReaderতারা কোথা থেকে ডেটা পড়ে। FileReaderএকটি ফাইল থেকে ডেটা পড়ে (duh — তাই এটিকে বলা হয় FileReader), কিন্তু InputStreamReaderএকটি থেকে ডেটা পড়ে InputStream

FileReaderআপনি যখন পদ্ধতিটি ব্যবহার করে একটি অবজেক্ট থেকে একটি অক্ষর পড়েন read(), তখন এটি ডিস্কের ফাইল থেকে দুটি বাইট পড়ে এবং তাদের হিসাবে ফেরত দেয় chars

InputStreamReaderআপনি যখন পদ্ধতিটি ব্যবহার করে একটি অবজেক্ট থেকে একটি অক্ষর পড়েন read(), তখন এটি FileInputStreamতার কাছে পাস করা বস্তু থেকে দুটি বাইট পড়ে, যা ফলস্বরূপ ফাইল থেকে ডেটা পড়ে। ফলাফল পদ্ধতি কল একটি শৃঙ্খল হয়read() .


2. BufferedReaderক্লাস

আরেকটি আকর্ষণীয় ক্লাস যা আপনি সম্ভবত অনেক ব্যবহার করতে পারেন BufferedReader। এটি একটি "মধ্যবর্তী স্ট্রীম" যা অন্য স্ট্রিম থেকে ডেটা পড়ে।

এর নাম অনুসারে, BufferedReaderক্লাসটি একটি সাবক্লাস Readerএবং আপনাকে অক্ষর পড়তে দেয় । তবে সবচেয়ে মজার বিষয় হল আপনাকে এটিকে একটি স্ট্রীমের আকারে একটি ডেটা উত্স পাস করতে হবে যেখান থেকে অক্ষরগুলি পড়া যেতে পারে , যেমন একটি স্ট্রীম যা Readerক্লাসের উত্তরাধিকারী হয়৷

আলোচ্য বিষয়টি কি? ভিন্ন InputStreamReader, BufferedReaderক্লাস বাইটকে অক্ষরে রূপান্তর করে না: এটি কিছুতেই রূপান্তর করে না। পরিবর্তে, এটি ডেটা বাফার করে

যখন একটি প্রোগ্রাম একটি BufferedReaderঅবজেক্ট থেকে একটি একক অক্ষর পড়ে, তখন অবজেক্টটি তার উৎস স্ট্রীম থেকে একযোগে একটি বড় অ্যারের অক্ষর পড়ে। এবং তাদের অভ্যন্তরীণভাবে সংরক্ষণ করে।

যখন পরবর্তী অক্ষরটি অবজেক্ট থেকে পড়া হয় BufferedReader, তখন এটি কেবল তার অভ্যন্তরীণ বাফার অ্যারে থেকে পরবর্তী অক্ষরটিকে ধরে নেয় এবং ডেটা উত্স অ্যাক্সেস না করেই এটি ফেরত দেয়। শুধুমাত্র যখন বাফারের সমস্ত অক্ষর ব্যবহার করা হয় তখন এটি অক্ষরের আরেকটি বড় অ্যারেতে পড়ে।

ক্লাসের BufferedReaderএকটি খুব দরকারী পদ্ধতিও রয়েছে — String readLine(), যা আপনাকে সোর্স স্ট্রিম থেকে ডেটার সম্পূর্ণ স্ট্রিং একবারে পড়তে দেয়। আপনি এই পদ্ধতিটি ব্যবহার করতে পারেন, বলুন, একটি ফাইল পড়তে এবং এর বিষয়বস্তু স্ক্রীনে লাইনে লাইনে প্রদর্শন করতে পারেন। উদাহরণ:

এটি কতটা সুবিধাজনক হতে পারে তা বোঝাতে আমরা বিশেষভাবে কিছু কমপ্যাক্ট কোড লিখেছি। এই কোডটি আরও একটু বিস্তারিতভাবে লেখা যেতে পারে।

String src = "c:\\projects\\log.txt";

try(FileReader in = new FileReader(src);
BufferedReader reader = new BufferedReader(in))
{
   while (reader.ready())
   {
      String line = reader.readLine();
      System.out.println(line);
   }
}
একটি FileReaderবস্তু তৈরি করুন। তথ্য উৎস একটি ফাইল.
একটি BufferedReaderবস্তু তৈরি করুন। তথ্য উৎস হল একটি FileReader.
যতক্ষণ রিডারে ডেটা থাকে ততক্ষণ
একটি লাইন পড়ুন
লাইনটি প্রদর্শন করুন
একটি গুরুত্বপূর্ণ পয়েন্ট:

আপনি যদি একাধিক স্ট্রীম একসাথে চেইন করেন, তবে close()পদ্ধতিটি শুধুমাত্র তাদের মধ্যে একটিতে কল করা দরকার। close()চূড়ান্ত ডেটা স্ট্রীমে কল না হওয়া পর্যন্ত সেই স্ট্রীমটি তার ডেটা উত্সে পদ্ধতিটিকে কল করবে, এবং তাই ।



3. কনসোল থেকে পড়া

এবং আরও একটি আকর্ষণীয় তথ্য: Scannerক্লাসটি একটি মধ্যবর্তী ইনপুট স্ট্রিম ছাড়া আর কিছুই নয় যা থেকে ডেটা পড়ে System.in, যা একটি ডেটা স্ট্রিমও।

কনসোল থেকে একটি লাইন পড়ার দুটি উপায় এখানে রয়েছে:

স্ক্যানার ক্লাস বাফারডরিডার এবং বাফারডরাইটার ক্লাস
InputStream stream = System.in;
Scanner console = new Scanner(stream);
String line = console.nextLine();
InputStream stream = System.in;
InputStreamReader reader = new InputStreamReader(stream);
BufferedReader buff = new BufferedReader(reader);
String line = buff.readLine();

আমাদের বন্ধু ক্লাসের একটি স্ট্যাটিক পরিবর্তনশীল ছাড়া আর কিছুই নয় । এটি একটি যার নাম ।System.ininSystemInputStreamin

তাই কোডজিমে আপনার জাভা অধ্যয়নের শুরু থেকেই, আপনি ডেটা স্ট্রীম নিয়ে কাজ করছেন এবং তাদের থেকে চেইন তৈরি করছেন। তবে এখন আপনি এটি আরও সচেতনভাবে করবেন।