PushbackInputStream এবং PushbackReader ক্লাসগুলি Java I/O প্যাকেজের একটি অংশ, যা ডেটা পুনঃব্যবহারের জন্য ব্যবহৃত হয়। এগুলি মূলত তখন ব্যবহার করা হয় যখন আপনাকে ডেটার উপর কিছু প্রক্রিয়া চালানোর পর, সেই ডেটা পুনরায় স্ট্রিমে ফেলে দিতে হয়।
এগুলি pushback কৌশল ব্যবহার করে, যেখানে একটি বাইট বা চরিত্র ফেরত পাঠানো (পুশব্যাক) হয় এবং পুনরায় পড়া হতে পারে। যখন আপনি একটি PushbackInputStream বা PushbackReader ব্যবহার করেন, আপনি একটি নির্দিষ্ট আংশিক ডেটাকে "পুশব্যাক" করতে পারেন, অর্থাৎ আপনি কিছু ডেটা পড়ার পরে সেই ডেটা আবার স্ট্রিমে রাখতে পারেন, যাতে সেটি আবার প্রক্রিয়া করা যায়।
PushbackInputStream এবং PushbackReader এর ধারণা:
- PushbackInputStream:
- এটি
InputStreamএর একটি সাবক্লাস যা বাইনারি ডেটার জন্য ব্যবহৃত হয়। আপনিunread()মেথড ব্যবহার করে একটি বা একাধিক বাইট push back করতে পারেন, যাতে পরে এই বাইটগুলি আবার পড়া যায়।
- এটি
- PushbackReader:
- এটি
Readerএর একটি সাবক্লাস যা Character Streams জন্য ব্যবহৃত হয়। এটিunread()মেথড সরবরাহ করে, যার মাধ্যমে আপনি একটি বা একাধিক চরিত্র push back করতে পারেন।
- এটি
PushbackInputStream এর ব্যবহার (Byte Streams)
PushbackInputStream ব্যবহার করে, আপনি বাইনারি ডেটা পুনরায় পড়তে পারেন। এটি বিশেষত ব্যবহারী বা নেটওয়ার্ক প্রোটোকলগুলির জন্য উপযোগী, যেখানে আপনি ডেটার উপর পুনরায় প্রক্রিয়া চালাতে চান।
PushbackInputStream উদাহরণ:
import java.io.*;
public class PushbackInputStreamExample {
public static void main(String[] args) {
String inputData = "Hello, world!";
byte[] inputBytes = inputData.getBytes();
try (PushbackInputStream pushbackInputStream = new PushbackInputStream(new ByteArrayInputStream(inputBytes))) {
int byteData = pushbackInputStream.read();
System.out.println((char) byteData); // প্রথম বাইট পড়া হবে (H)
// পুশব্যাক করা হচ্ছে প্রথম বাইট (H)
pushbackInputStream.unread(byteData);
// পুনরায় পড়া হবে সেই বাইট (H)
byteData = pushbackInputStream.read();
System.out.println((char) byteData); // পুনরায় H পড়া হবে
} catch (IOException e) {
e.printStackTrace();
}
}
}
ব্যাখ্যা:
- প্রথমে PushbackInputStream দিয়ে একটি বাইট পড়া হয় এবং তারপর সেই বাইট
unread()মেথডের মাধ্যমে স্ট্রীমে পুনরায় পাঠানো হয়। - এটি byte-by-byte ইনপুট পরিচালনার জন্য উপকারী, যেখানে আপনি একটি বাইট বা ডেটার অংশ পুনরায় ইনপুট স্ট্রীমে রাখতে চান।
আউটপুট:
H
H
PushbackReader এর ব্যবহার (Character Streams)
PushbackReader মূলত Character Streams এর জন্য ব্যবহৃত হয়, যেখানে আপনি টেক্সট ডেটা পুনরায় পড়তে পারবেন।
PushbackReader উদাহরণ:
import java.io.*;
public class PushbackReaderExample {
public static void main(String[] args) {
String inputData = "Hello, world!";
try (PushbackReader pushbackReader = new PushbackReader(new StringReader(inputData))) {
int charData = pushbackReader.read();
System.out.println((char) charData); // প্রথম ক্যারেক্টার পড়া হবে (H)
// পুশব্যাক করা হচ্ছে প্রথম ক্যারেক্টার (H)
pushbackReader.unread(charData);
// পুনরায় পড়া হবে সেই ক্যারেক্টার (H)
charData = pushbackReader.read();
System.out.println((char) charData); // পুনরায় H পড়া হবে
} catch (IOException e) {
e.printStackTrace();
}
}
}
ব্যাখ্যা:
- PushbackReader ব্যবহার করে প্রথমে একটি চরিত্র পড়া হচ্ছে (H), তারপর সেটি
unread()মেথডের মাধ্যমে পুনরায় স্ট্রিমে পুশব্যাক করা হচ্ছে। - read() মেথডের মাধ্যমে পুনরায় সেই চরিত্র পড়া হচ্ছে।
আউটপুট:
H
H
PushbackInputStream এবং PushbackReader এর সুবিধা:
- Data Reusability:
- PushbackInputStream এবং PushbackReader আপনাকে ইনপুট ডেটা পুনরায় ব্যবহার করতে দেয়, যাতে আপনি প্রক্রিয়াকরণের সময় কোনো ভুল বুঝে ফেললে, সেগুলি আবার পরীক্ষা করতে পারেন।
- Efficient for Protocol Parsing:
- বিভিন্ন প্রোটোকল বা parsing এর ক্ষেত্রে, যেখানে ডেটার কিছু অংশ আগেই পড়ে, এবং পরে সেটি আবার পড়তে হয়, এই ক্লাসগুলি কার্যকর।
- Pushback Mechanism:
- Pushback মেথডের মাধ্যমে আপনি একটি বা একাধিক বাইট বা ক্যারেক্টার পুনরায় স্ট্রিমে রাখতে পারেন, যা বিশেষত token parsing এর জন্য দরকারী।
PushbackInputStream এবং PushbackReader এর সীমাবদ্ধতা:
- Memory Overhead:
- PushbackInputStream এবং PushbackReader ক্লাসগুলো buffering প্রযুক্তি ব্যবহার করে, যার কারণে কিছু অতিরিক্ত মেমরি ব্যবহৃত হতে পারে, বিশেষত যদি বড় ডেটা সেট ব্যবহৃত হয়।
- Limited Pushback Capacity:
- PushbackInputStream এবং PushbackReader সাধারণত একটি ছোট বাফার ব্যবহার করে (একটি বাইট বা একটি চরিত্র), সুতরাং অনেক বড় আকারের ডেটা pushback করা সম্ভব নয়।
- Not Suitable for All Scenarios:
- এগুলি শুধুমাত্র stream parsing এর জন্য উপযুক্ত, এবং সাধারণ text processing বা binary I/O জন্য ব্যবহৃত হয় না।
- PushbackInputStream এবং PushbackReader ক্লাসগুলি Java I/O-তে শক্তিশালী টুলস যা ডেটা পুনঃব্যবহার (pushback) করার জন্য ব্যবহৃত হয়।
- এগুলি মূলত protocol parsing এবং token processing এর জন্য উপকারী যেখানে একটি অংশ ডেটা প্রক্রিয়া করার পরে তা পুনরায় পড়তে হয়।
- PushbackInputStream বাইনারি ডেটার জন্য এবং PushbackReader টেক্সট ডেটার জন্য ব্যবহৃত হয়।
এই ক্লাসগুলির মাধ্যমে byte-by-byte বা character-by-character ডেটা প্রক্রিয়া করার সময়, আপনি ডেটা pushback করে পুনরায় ব্যবহার করতে পারবেন, যা অনেক প্রোগ্রামিং পরিস্থিতিতে অত্যন্ত কার্যকর।