1. OutputStreamক্লাস

আমরা সম্প্রতি ইনপুট স্ট্রীমগুলি অন্বেষণ করেছি৷ আউটপুট স্ট্রীম সম্পর্কে কথা বলার সময় এসেছে।

বাইট আউটপুট সমর্থন করে এমন সমস্ত ক্লাসের জন্য ক্লাস OutputStreamহল প্যারেন্ট ক্লাস। এটি একটি বিমূর্ত শ্রেণী যা নিজে থেকে কিছুই করে না, তবে প্রতিটি অনুষ্ঠানের জন্য এটির বংশধর শ্রেণী রয়েছে।

এটা অত্যন্ত জটিল শোনাচ্ছে. আরও সহজভাবে বলতে গেলে, এই ক্লাসটি বাইটগুলিতে কাজ করে, উদাহরণস্বরূপ, অক্ষর বা অন্যান্য ডেটা প্রকার নয়। এবং সত্য যে এটি বিমূর্ত মানে আমরা সাধারণত এটি ব্যবহার করি না, বরং এর বংশধরদের মধ্যে একটি। উদাহরণস্বরূপ, FileOutputStreamএবং মত.

কিন্তু ক্লাসে ফিরে OutputStream। এই শ্রেণীর পদ্ধতি রয়েছে যা এর সমস্ত বংশধরদের অবশ্যই প্রয়োগ করতে হবে। এখানে প্রধান হল:

পদ্ধতি বর্ণনা
void write(int b)
intস্ট্রীমে এক বাইট (একটি নয়) লেখে ।
void write(byte[] buffer)
স্ট্রীমে বাইটের একটি অ্যারে লেখে
void write(byte[] buffer, off, len)
স্ট্রীমে বাইটের একটি অ্যারের অংশ লেখে
void flush()
বাফারে সংরক্ষিত সমস্ত ডেটা স্ট্রীমে লেখে
void close()
স্রোত বন্ধ করে দেয়

আপনি যখন উত্তরাধিকারসূত্রে পাওয়া একটি ক্লাসের একটি বস্তু তৈরি করেন InputStream, তখন আপনি সাধারণত একটি উৎস অবজেক্ট নির্দিষ্ট করেন যেখান InputStreamথেকে ডেটা পড়ে। আপনি যখন উত্তরাধিকারসূত্রে প্রাপ্ত একটি ক্লাসের একটি অবজেক্ট তৈরি করেন OutputStream, তখন আপনি সাধারণত টার্গেট অবজেক্ট বা স্ট্রীম নির্দিষ্ট করেন যেখানে ডেটা লেখা হবে।

আসুন সংক্ষেপে ক্লাসের সমস্ত পদ্ধতির মধ্য দিয়ে যাওয়া যাক OutputStream:

write(int b)পদ্ধতি

intএই পদ্ধতিটি আউটপুট স্ট্রীমে একটি বাইট (একটি নয়) লেখে । পাস করা মান একটি বাইটে নিক্ষেপ করা হয় এবং int-এর প্রথম তিনটি বাইট বাতিল করা হয়।

write(byte[] buffer)পদ্ধতি

আউটপুট স্ট্রীমে বাইটের প্রদত্ত অ্যারে লেখে। এটাই.

write(byte[] buffer, int offset, int length)পদ্ধতি

আউটপুট স্ট্রীমে বাইটের পাস করা অ্যারের একটি অংশ লেখে। অফসেট ভেরিয়েবল অ্যারের প্রথম উপাদানের সূচী নির্দেশ করে এবং lengthলিখতে হবে উপসেটের দৈর্ঘ্য।

flush()পদ্ধতি

flush()বর্তমান স্ট্রীমে সম্ভাব্য বাফার করা যেকোন ডেটাকে টার্গেট স্ট্রীমে লিখতে বাধ্য করতে পদ্ধতিটি ব্যবহার করা হয় । একটি শৃঙ্খলে সাজানো বাফারিং এবং/অথবা একাধিক স্ট্রিম অবজেক্ট ব্যবহার করার সময় এটি প্রাসঙ্গিক।

close()পদ্ধতি

লক্ষ্য বস্তুতে কোনো অলিখিত তথ্য লেখে। আপনি যদি একটি ব্লক ব্যবহার করেন তবে পদ্ধতিটি close()কল করার দরকার নেই ।try-with-resources

একটি ফাইল কপি করার উদাহরণ

কোড বিঃদ্রঃ
String src = "c:\\projects\\log.txt";
String dest = "c:\\projects\\copy.txt";

try(FileInputStream input = new FileInputStream(src);
FileOutputStream output = new FileOutputStream(dest))
{
   byte[] buffer = new byte[65536]; // 64Kb
   while (input.available() > 0)
   {
      int real = input.read(buffer);
      output.write(buffer, 0, real);
   }
}



InputStreamএকটি ফাইল থেকে পড়ার জন্য
OutputStreamএকটি ফাইল লিখুন

বাফার যাতে আমরা ডেটা পড়ব
যতক্ষণ স্ট্রীমে ডেটা থাকে ততক্ষণ

বাফারে ডেটা পড়ুন
বাফার থেকে দ্বিতীয় স্ট্রীমে ডেটা লিখুন

2. Writerক্লাস

ক্লাসটি ক্লাসের Writerমতো ঠিক একই OutputStream, তবে আবার একটি পার্থক্য: এটি charবাইটের পরিবর্তে অক্ষর ( ) দিয়ে কাজ করে।

এটি একটি বিমূর্ত ক্লাস: আপনি ক্লাসের বস্তু তৈরি করতে পারবেন না Writer। এর মূল লক্ষ্য হল শত শত বংশধর শ্রেণীর জন্য একটি সাধারণ অভিভাবক শ্রেণী হওয়া এবং তাদের চরিত্রের স্ট্রিমগুলির সাথে কাজ করার জন্য সাধারণ পদ্ধতিগুলি দেওয়া।

ক্লাসের পদ্ধতি Writer(এবং এর সমস্ত বংশধর শ্রেণী):

পদ্ধতি বর্ণনা
void write(int b)
intস্রোতে একটি অক্ষর (একটি নয়) লেখে ।
void write(char[] buffer)
প্রবাহে অক্ষরের একটি অ্যারে লেখে
void write(char[] buffer, off, len)
স্ট্রীমে অক্ষরের একটি অ্যারের অংশ লেখে
void write(String str)
স্রোতে একটি স্ট্রিং লেখে
void write(String str, off, len)
প্রবাহে একটি স্ট্রিংয়ের অংশ লেখে
void flush()
বাফারে সংরক্ষিত সমস্ত ডেটা স্ট্রীমে লেখে
void close()
স্রোত বন্ধ করে দেয়

পদ্ধতিগুলি ক্লাসের পদ্ধতিগুলির সাথে খুব মিল OutputStream, তবে তারা বাইটের পরিবর্তে অক্ষরগুলির সাথে কাজ করে।

পদ্ধতির বর্ণনা:

write(int b)পদ্ধতি

এই পদ্ধতিটি আউটপুট স্ট্রীমে একটি একক অক্ষর ( char— একটি নয় ) লেখে। intপাস করা মান একটি তে নিক্ষেপ করা হয় charএবং প্রথম দুটি বাইট বাতিল করা হয়।

write(char[] buffer)পদ্ধতি

আউটপুট স্ট্রীমে অক্ষরের প্রদত্ত অ্যারে লেখে।

write(char[] buffer, int offset, int length)পদ্ধতি

আউটপুট স্ট্রীমে অক্ষরের পাস করা অ্যারের একটি অংশ লেখে। ভেরিয়েবলটি offsetঅ্যারের প্রথম উপাদানের সূচী নির্দেশ করে এবং যে lengthসাবসেটটি লিখতে হবে তার দৈর্ঘ্য।

write(String str)পদ্ধতি

আউটপুট স্ট্রীমে প্রদত্ত স্ট্রিং লেখে।

write(String str, int offset, int length)পদ্ধতি

প্রদত্ত স্ট্রিংয়ের একটি অংশ আউটপুট স্ট্রীমে লেখে: স্ট্রিংটি অক্ষরের একটি অ্যারেতে রূপান্তরিত হয়। ভেরিয়েবলটি offsetঅ্যারের প্রথম উপাদানের সূচী নির্দেশ করে এবং যে lengthসাবসেটটি লিখতে হবে তার দৈর্ঘ্য।

flush()পদ্ধতি

flush()বর্তমান স্ট্রীমে সম্ভাব্য বাফার করা যেকোন ডেটাকে টার্গেট স্ট্রীমে লিখতে বাধ্য করতে পদ্ধতিটি ব্যবহার করা হয় । একটি শৃঙ্খলে সাজানো বাফারিং এবং/অথবা একাধিক স্ট্রিম অবজেক্ট ব্যবহার করার সময় এটি প্রাসঙ্গিক।

close()পদ্ধতি

লক্ষ্য বস্তুতে কোনো অলিখিত তথ্য লেখে। আপনি যদি একটি ব্লক ব্যবহার করেন তবে পদ্ধতিটি close()কল করার দরকার নেই ।try-with-resources

একটি প্রোগ্রামের উদাহরণ যা একটি পাঠ্য ফাইল অনুলিপি করে:

কোড বিঃদ্রঃ
String src = "c:\\projects\\log.txt";
String dest = "c:\\projects\\copy.txt";

try(FileReader reader = new FileReader(src);
FileWriter writer = new FileWriter(dest))
{
   char[] buffer = new char[65536]; // 128Kb
   while (reader.ready())
   {
      int real = reader.read(buffer);
      writer.write(buffer, 0, real);
   }
}



Readerএকটি ফাইল থেকে পড়ার জন্য
Writerএকটি ফাইলে লেখার জন্য

বাফার যেখানে আমরা ডেটা পড়ব
যতক্ষণ স্ট্রীমে ডেটা থাকে ততক্ষণ

একটি বাফারে ডেটা পড়ুন
বাফার থেকে দ্বিতীয় স্ট্রীমে ডেটা লিখুন

StringWriterক্লাস

আরেকটি আকর্ষণীয় শ্রেণী রয়েছে যা Writerক্লাসের উত্তরাধিকারী হয়: এটি বলা হয় StringWriter। এটিতে একটি পরিবর্তনযোগ্য স্ট্রিং রয়েছে - একটি StringBufferবস্তু। এবং প্রতিবার আপনি বস্তুতে কিছু "লিখেন" StringWriter, পাঠ্যটি কেবল তার অভ্যন্তরীণ বাফারে যোগ করা হয়।

উদাহরণ:

কোড বিঃদ্রঃ
StringWriter writer = new StringWriter();
writer.write("Hello");
writer.write(String.valueOf(123));

String result = writer.toString();
একটি টার্গেট ক্যারেক্টার স্ট্রীম ( StringWriter) তৈরি করা হয়
একটি স্ট্রিং একটি স্ট্রিং এর ভিতরে বাফারে লেখা হয় একটি স্ট্রিং একটি বস্তুর বিষয়বস্তুকে একটি স্ট্রিংয়ে রূপান্তরিত করার StringWriter
ভিতরে বাফারে লেখা হয়StringWriter

এই ক্ষেত্রে, StringWriterক্লাসটি মূলত ক্লাসের উপর একটি মোড়ক StringBuffer, তবে StringWriterক্লাসটি স্ট্রিম ক্লাসের একটি বংশধর Writerএবং এটি স্ট্রিম অবজেক্টের চেইনগুলিতে ব্যবহার করা যেতে পারে। এটি অনুশীলনে একটি সুন্দর দরকারী সম্পত্তি।