1. OutputStreamক্লাস
আমরা সম্প্রতি ইনপুট স্ট্রীমগুলি অন্বেষণ করেছি৷ আউটপুট স্ট্রীম সম্পর্কে কথা বলার সময় এসেছে।
বাইট আউটপুট সমর্থন করে এমন সমস্ত ক্লাসের জন্য ক্লাস OutputStreamহল প্যারেন্ট ক্লাস। এটি একটি বিমূর্ত শ্রেণী যা নিজে থেকে কিছুই করে না, তবে প্রতিটি অনুষ্ঠানের জন্য এটির বংশধর শ্রেণী রয়েছে।
এটা অত্যন্ত জটিল শোনাচ্ছে. আরও সহজভাবে বলতে গেলে, এই ক্লাসটি বাইটগুলিতে কাজ করে, এবং নয়, উদাহরণস্বরূপ, অক্ষর বা অন্যান্য ডেটা প্রকার। এবং সত্য যে এটি বিমূর্ত মানে আমরা সাধারণত এটি ব্যবহার করি না, বরং এর বংশধর শ্রেণীর একটি। উদাহরণস্বরূপ, FileOutputStreamএবং মত.
কিন্তু ক্লাসে ফিরে OutputStream। এই শ্রেণীর পদ্ধতি রয়েছে যা এর সমস্ত বংশধরদের অবশ্যই প্রয়োগ করতে হবে। এখানে প্রধান হল:
| পদ্ধতি | বর্ণনা |
|---|---|
|
intস্ট্রীমে এক বাইট (একটি নয়) লেখে । |
|
স্ট্রীমে বাইটের একটি অ্যারে লেখে |
|
স্ট্রীমে বাইটের একটি অ্যারের অংশ লেখে |
|
বাফারে সংরক্ষিত সমস্ত ডেটা স্ট্রীমে লেখে |
|
প্রবাহ বন্ধ করে দেয় |
আপনি যখন উত্তরাধিকারসূত্রে পাওয়া একটি ক্লাসের একটি বস্তু তৈরি করেন 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
একটি ফাইল কপি করার উদাহরণ
| কোড | বিঃদ্রঃ |
|---|---|
|
InputStreamএকটি ফাইল থেকে পড়ার জন্য OutputStreamএকটি ফাইল লিখুন বাফার যাতে আমরা ডেটা পড়ব যতক্ষণ স্ট্রীমে ডেটা থাকে ততক্ষণ বাফারে ডেটা পড়ুন বাফার থেকে দ্বিতীয় স্ট্রীমে ডেটা লিখুন |
2. Writerক্লাস
ক্লাসটি ক্লাসের Writerমতো ঠিক একই OutputStream, তবে আবার একটি পার্থক্য: এটি charবাইটের পরিবর্তে অক্ষর ( ) দিয়ে কাজ করে।
এটি একটি বিমূর্ত ক্লাস: আপনি ক্লাসের বস্তু তৈরি করতে পারবেন না Writer। এর মূল লক্ষ্য হল শত শত বংশধর শ্রেণীর জন্য একটি সাধারণ অভিভাবক শ্রেণী হওয়া এবং তাদের চরিত্রের স্ট্রীমগুলির সাথে কাজ করার জন্য সাধারণ পদ্ধতিগুলি দেওয়া।
ক্লাসের পদ্ধতি Writer(এবং এর সমস্ত বংশধর শ্রেণী):
| পদ্ধতি | বর্ণনা |
|---|---|
|
intস্রোতে একটি অক্ষর (একটি নয়) লেখে । |
|
প্রবাহে অক্ষরের একটি অ্যারে লেখে |
|
স্ট্রীমে অক্ষরের একটি অ্যারের অংশ লেখে |
|
স্রোতে একটি স্ট্রিং লেখে |
|
প্রবাহে একটি স্ট্রিংয়ের অংশ লেখে |
|
বাফারে সংরক্ষিত সমস্ত ডেটা স্ট্রীমে লেখে |
|
প্রবাহ বন্ধ করে দেয় |
পদ্ধতিগুলি ক্লাসের পদ্ধতিগুলির সাথে খুব মিল 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
একটি প্রোগ্রামের উদাহরণ যা একটি পাঠ্য ফাইল অনুলিপি করে:
| কোড | বিঃদ্রঃ |
|---|---|
|
Readerএকটি ফাইল থেকে পড়ার জন্য Writerএকটি ফাইলে লেখার জন্য বাফার যেখানে আমরা ডেটা পড়ব যতক্ষণ স্ট্রীমে ডেটা থাকে ততক্ষণ একটি বাফারে ডেটা পড়ুন বাফার থেকে দ্বিতীয় স্ট্রীমে ডেটা লিখুন |
StringWriterক্লাস
আরেকটি আকর্ষণীয় শ্রেণী রয়েছে যা Writerক্লাসের উত্তরাধিকারী হয়: এটি বলা হয় StringWriter। এটিতে একটি পরিবর্তনযোগ্য স্ট্রিং রয়েছে - একটি StringBufferবস্তু। এবং প্রতিবার আপনি বস্তুতে কিছু "লিখেন" StringWriter, পাঠ্যটি কেবল তার অভ্যন্তরীণ বাফারে যোগ করা হয়।
উদাহরণ:
| কোড | বিঃদ্রঃ |
|---|---|
|
একটি টার্গেট ক্যারেক্টার স্ট্রীম ( StringWriter) তৈরি করা হয় একটি স্ট্রিং একটি স্ট্রিং এর ভিতরে বাফারে লেখা হয় একটি স্ট্রিং একটি বস্তুর বিষয়বস্তুকে একটি স্ট্রিংয়ে রূপান্তরিত করার StringWriterভিতরে বাফারে লেখা হয় StringWriter |
এই ক্ষেত্রে, StringWriterক্লাসটি মূলত ক্লাসের উপর একটি মোড়ক StringBuffer, তবে StringWriterক্লাসটি স্ট্রিম ক্লাসের একটি বংশধর Writerএবং এটি স্ট্রিম অবজেক্টের চেইনগুলিতে ব্যবহার করা যেতে পারে। এটি অনুশীলনে একটি সুন্দর দরকারী সম্পত্তি।
3. PrintStreamক্লাস
আউটপুট স্ট্রীম ক্লাসগুলিকে মধ্যস্থতাকারী স্ট্রীমগুলির সাথে একটি শৃঙ্খলে রাখা যেতে পারে যা তাদের কাছে পাঠানো টার্গেট স্ট্রীমে ডেটা লেখে। এই স্ট্রিমগুলির মিথস্ক্রিয়াটির সাধারণ দৃষ্টিভঙ্গি এইরকম দেখায়:

সমস্ত মধ্যবর্তী আউটপুট স্ট্রিমগুলির মধ্যে সবচেয়ে আকর্ষণীয় এবং বহুমুখী হল PrintStream৷ এটিতে দশটি পদ্ধতি এবং 12টির মতো কনস্ট্রাক্টর রয়েছে।
ক্লাস PrintStreamউত্তরাধিকারসূত্রে প্রাপ্ত FilterOutputStreamবর্গ, যা উত্তরাধিকারসূত্রে প্রাপ্ত হয় OutputStream। তার মানে ক্লাসের নিজস্ব পদ্ধতি ছাড়াও প্যারেন্ট ক্লাসের সমস্ত পদ্ধতিPrintStream রয়েছে । এখানে সবচেয়ে আকর্ষণীয় হল:
| পদ্ধতি | বর্ণনা |
|---|---|
|
পাস করা বস্তুটিকে একটি স্ট্রিং-এ রূপান্তর করে এবং এটিকে টার্গেট স্ট্রিমে আউটপুট করে। |
|
পাস করা বস্তুটিকে একটি স্ট্রিং-এ রূপান্তর করে এবং এটিকে টার্গেট স্ট্রিমে আউটপুট করে। শেষে একটি লাইন বিরতি যোগ করে |
|
টার্গেট স্ট্রিমে একটি লাইন ব্রেক অক্ষর আউটপুট করে |
|
বিন্যাস স্ট্রিং এবং পাস করা আর্গুমেন্টের উপর ভিত্তি করে একটি স্ট্রিং গঠন করে এবং আউটপুট করে; String.format()পদ্ধতির অনুরূপ |
এবং এই দশটি পদ্ধতি কোথায়, আপনি জিজ্ঞাসা করেন?
ঠিক আছে, এটিতে বিভিন্ন পরামিতি সহ বিভিন্ন পদ্ধতি print()এবং পদ্ধতি রয়েছে। println()তাদের এই টেবিলে সংক্ষিপ্ত করা যেতে পারে।
আমরা এই পদ্ধতিগুলিতে ডুব দেব না, কারণ আপনি ইতিমধ্যে সেগুলি ভালভাবে জানেন। আপনি কি অনুমান করতে পারেন আমি কি পাচ্ছি?
মনে আছে System.out.println()? তবে এটি দুটি লাইনে লেখা যেতে পারে:
| কোড | কনসোল আউটপুট |
|---|---|
|
|
আমাদের প্রিয় কমান্ড হল ক্লাসের স্ট্যাটিক ভেরিয়েবলের মেথডে কল করা । এবং এই পরিবর্তনশীল এর টাইপ হয় .System.out.println()println()outSystemPrintStream
PrintStreamঅনেক CodeGym লেভেলে, এবং প্রায় প্রতিটি টাস্কে, আপনি না জেনেও ক্লাসের মেথড কল করছেন !
বাস্তবিক ব্যবহার
জাভা নামক এই আকর্ষণীয় ক্লাস আছে ByteArrayOutputStream, যা একটি গতিশীলভাবে ক্রমবর্ধমান বাইট অ্যারে যা উত্তরাধিকারসূত্রে পাওয়া যায় OutputStream।
একটি ByteArrayOutputStreamবস্তু এবং PrintStreamবস্তুকে এইভাবে শৃঙ্খলিত করা যেতে পারে:
| কোড | বর্ণনা |
|---|---|
|
মেমরিতে একটি রাইট বাফার তৈরি করুন একটি বস্তুতে বাফারটি মোড়ানো কনসোলে ডেটা লিখুন অ্যারেটিকে একটি স্ট্রিংয়ে রূপান্তর করুন! কনসোল আউটপুট: PrintStream |
GO TO FULL VERSION