Character Streams হল Java I/O (Input/Output) সিস্টেমের একটি গুরুত্বপূর্ণ অংশ যা text data (অর্থাৎ, ক্যারেক্টার ডেটা) পড়তে এবং লিখতে ব্যবহৃত হয়। Java তে Character Streams মূলত 16-bit Unicode characters পরিচালনা করে, যা ASCII স্ট্রিং থেকে বিভিন্ন ভাষার অক্ষরসমূহকে সঠিকভাবে প্রসেস করতে সহায়ক।
Java-তে Character Streams দুটি প্রধান ক্লাসের মাধ্যমে কাজ করে:
- Reader (পাঠক)
- Writer (লেখক)
Character Streams এর বৈশিষ্ট্য:
- Byte Streams (যেমন InputStream এবং OutputStream) এর সাথে তুলনা করলে Character Streams টেক্সট ডেটার জন্য উপযুক্ত, কারণ তারা Unicode সাপোর্ট করে।
- Character Streams ব্লক আকারে ডেটা পড়ে এবং লেখে, যা Byte Streams এর তুলনায় দ্রুত এবং আরও কার্যকরী।
Character Streams এর ক্লাসসমূহ:
- Reader: টেক্সট ডেটা পড়ার জন্য ব্যবহৃত হয়।
- FileReader
- BufferedReader
- CharArrayReader
- Writer: টেক্সট ডেটা লেখার জন্য ব্যবহৃত হয়।
- FileWriter
- BufferedWriter
- PrintWriter
- CharArrayWriter
Character Streams এর মেথডসমূহ:
| মেথড | বর্ণনা |
|---|---|
read() | একটি ক্যারেক্টার পড়ে। |
read(char[] cbuf) | ক্যারেক্টার অ্যারে থেকে ডেটা পড়ে। |
write(int c) | একটি ক্যারেক্টার লেখে। |
write(char[] cbuf) | ক্যারেক্টার অ্যারে থেকে ডেটা লেখে। |
close() | স্ট্রিমটি বন্ধ করে। |
Character Streams এর ব্যবহার:
১. FileReader উদাহরণ
FileReader ক্লাস একটি ফাইল থেকে টেক্সট পড়ার জন্য ব্যবহৃত হয়। এটি Character Streams এর সবচেয়ে মৌলিক এবং সাধারণ ক্লাস।
import java.io.FileReader;
import java.io.IOException;
public class FileReaderExample {
public static void main(String[] args) {
try (FileReader fr = new FileReader("example.txt")) {
int character;
while ((character = fr.read()) != -1) {
System.out.print((char) character); // ফাইল থেকে পড়া প্রতিটি ক্যারেক্টার প্রিন্ট করা
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
ব্যাখ্যা:
FileReaderফাইল থেকে টেক্সট পড়ে এবং প্রতিটি ক্যারেক্টারকে কনসোলে প্রিন্ট করে।read()মেথডটি এক একটি ক্যারেক্টার পড়ে, যতক্ষণ না এটি ফাইলের শেষ না আসে (EOF)।
২. BufferedReader উদাহরণ
BufferedReader ফাইলের প্রতিটি লাইন দ্রুত পড়ার জন্য BufferedReader ব্যবহার করা হয়। এটি readLine() মেথড দ্বারা সম্পূর্ণ লাইন পড়তে সক্ষম।
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
public class BufferedReaderExample {
public static void main(String[] args) {
try (BufferedReader br = new BufferedReader(new FileReader("example.txt"))) {
String line;
while ((line = br.readLine()) != null) {
System.out.println(line); // ফাইল থেকে পড়া প্রতিটি লাইন প্রিন্ট করা
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
ব্যাখ্যা:
BufferedReaderপ্রতি লাইনে ফাইলের ডেটা পড়ে, যা বড় ফাইলের জন্য খুব কার্যকর।readLine()মেথডটি পুরো লাইনে পড়ে এবংnullরিটার্ন করে যখন EOF আসে।
৩. FileWriter উদাহরণ
FileWriter ফাইলের মধ্যে টেক্সট লেখার জন্য ব্যবহৃত হয়।
import java.io.FileWriter;
import java.io.IOException;
public class FileWriterExample {
public static void main(String[] args) {
try (FileWriter fw = new FileWriter("output.txt")) {
fw.write("Hello, Java!"); // output.txt ফাইলে লেখার জন্য
System.out.println("Data written to file successfully.");
} catch (IOException e) {
e.printStackTrace();
}
}
}
ব্যাখ্যা:
FileWriterফাইলে একটি স্ট্রিং লেখে।write()মেথডটি ক্যারেক্টার বা স্ট্রিং লেখার জন্য ব্যবহৃত হয়।
৪. BufferedWriter উদাহরণ
BufferedWriter ফাইলের মধ্যে টেক্সট লেখার জন্য ব্যবহৃত হয় এবং এটি ফাইল লেখার গতি বাড়ায়, কারণ এটি ডেটা একটি বাফারে সংরক্ষণ করে রাখে।
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
public class BufferedWriterExample {
public static void main(String[] args) {
try (BufferedWriter bw = new BufferedWriter(new FileWriter("output.txt"))) {
bw.write("Buffered Writing in Java!");
System.out.println("Data written using BufferedWriter.");
} catch (IOException e) {
e.printStackTrace();
}
}
}
ব্যাখ্যা:
BufferedWriterব্যবহার করে ফাইলে দ্রুত লেখার জন্য BufferedWriter ক্লাস ব্যবহৃত হয়।- এটি
write()মেথডের মাধ্যমে টেক্সট ফাইলে লেখে।
Character Streams এর সুবিধা
- Unicode সাপোর্ট: Character Streams Unicode সাপোর্ট করে, তাই এটি বিশ্বের সকল ভাষার অক্ষর পড়তে এবং লেখতে সক্ষম।
- ফাইল লেখার গতি বৃদ্ধি: BufferedReader এবং BufferedWriter ব্যবহার করলে বড় ফাইলের সাথে কাজ করার গতি বৃদ্ধি পায়।
- দ্রুত এবং কার্যকরী: Character Streams মূলত টেক্সট ডেটার জন্য খুব কার্যকরী, বিশেষত ছোট এবং মাঝারি আকারের টেক্সট ফাইলের জন্য।
- Code Readability: Character Streams কোডের readability উন্নত করে, কারণ আপনি সরাসরি text এর সাথে কাজ করতে পারেন।
Character Streams এর সীমাবদ্ধতা
- প্রাথমিকভাবে টেক্সট ডেটার জন্য: এটি বাইনারি ডেটা যেমন ইমেজ বা ভিডিও ফাইল প্রক্রিয়া করার জন্য উপযুক্ত নয়।
- কিছু ইস্যু টেক্সট এনকোডিং: যদি ফাইলটি সঠিক character encoding-এ লেখা না থাকে, তবে পড়তে সমস্যা হতে পারে।
- কম পারফরম্যান্স বাইনারি ডেটার জন্য: বাইনারি ডেটা পরিচালনা করতে Byte Streams বেশি কার্যকরী।
Java Tuples এবং Character Streams
Java Tuples ব্যবহার করে, আপনি File Reader, BufferedReader, File Writer, BufferedWriter ইত্যাদি সম্পর্কিত বিভিন্ন ডেটা সংরক্ষণ করতে পারেন, যেমন ফাইলের নাম, আকার বা অবস্থা।
উদাহরণ:
import org.apache.commons.lang3.tuple.Pair;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
public class TupleWithCharacterStreams {
public static void main(String[] args) {
Pair<String, Long> fileInfo = getFileInfo("example.txt");
System.out.println("File Name: " + fileInfo.getLeft());
System.out.println("File Size: " + fileInfo.getRight() + " bytes");
try (BufferedReader reader = new BufferedReader(new FileReader(fileInfo.getLeft()))) {
String line;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
} catch (IOException e) {
e.printStackTrace();
}
}
public static Pair<String, Long> getFileInfo(String fileName) {
File file = new File(fileName);
return Pair.of(file.getName(), file.length());
}
}
ব্যাখ্যা:
- Pair<String, Long> ব্যবহার করে ফাইলের নাম এবং আকার সংরক্ষণ করা হয়েছে এবং BufferedReader ব্যবহার করে ফাইলের কন্টেন্ট পড়া হয়েছে।
- Character Streams Java-তে text data (যেমন, ASCII এবং Unicode) প্রক্রিয়া করার জন্য উপযুক্ত এবং কার্যকরী।
- FileReader, BufferedReader, FileWriter, এবং BufferedWriter ফাইলের সাথে টেক্সট ডেটা পরিচালনা করার জন্য খুবই উপযোগী।
- Java Tuples ব্যবহার করে ফাইলের নাম, আকার, এবং অন্যান্য প্রোপার্টি সংরক্ষণ করা যায়, যা পরবর্তীতে প্রসেস বা বিশ্লেষণ করার জন্য কার্যকরী হতে পারে।
Read more