DataInputStream এবং DataOutputStream ক্লাসগুলি Java I/O প্যাকেজের গুরুত্বপূর্ণ অংশ যা প্রিমিটিভ ডেটা টাইপ (যেমন int, float, boolean, ইত্যাদি) বাইনারি ফরম্যাটে স্ট্রিমের মাধ্যমে পড়তে এবং লেখার জন্য ব্যবহৃত হয়। এই ক্লাসগুলি binary I/O অপারেশনগুলির জন্য উপযুক্ত, যা ফাইল বা নেটওয়ার্কের মাধ্যমে সরাসরি প্রিমিটিভ ডেটা স্ট্রিম করতে সহায়ক।
DataInputStream এবং DataOutputStream এর ভূমিকা:
- DataInputStream:
- এটি InputStream এর একটি সাবক্লাস যা বাইনারি ফরম্যাটে প্রিমিটিভ ডেটা টাইপ পড়ার জন্য ব্যবহৃত হয়।
- এটি একে একে
int,float,double,booleanসহ অন্যান্য প্রিমিটিভ ডেটা টাইপ পড়তে সক্ষম।
- DataOutputStream:
- এটি OutputStream এর একটি সাবক্লাস যা বাইনারি ফরম্যাটে প্রিমিটিভ ডেটা টাইপ লেখার জন্য ব্যবহৃত হয়।
- এটি
int,float,double,booleanসহ অন্যান্য প্রিমিটিভ ডেটা টাইপ স্ট্রিমে লিখতে সক্ষম।
DataInputStream এর মেথড:
readInt(): একটি int মান পড়ে।readFloat(): একটি float মান পড়ে।readBoolean(): একটি boolean মান পড়ে।readUTF(): একটি UTF String পড়ে।
DataOutputStream এর মেথড:
writeInt(int v): একটি int মান লেখে।writeFloat(float v): একটি float মান লেখে।writeBoolean(boolean v): একটি boolean মান লেখে।writeUTF(String str): একটি UTF String লেখে।
DataInputStream এবং DataOutputStream উদাহরণ
১. DataOutputStream দিয়ে ডেটা লেখা এবং DataInputStream দিয়ে ডেটা পড়া
এটি একটি সাধারণ উদাহরণ যেখানে DataOutputStream ব্যবহার করে ফাইলে ডেটা লেখা হবে এবং পরবর্তীতে DataInputStream দিয়ে সেই ডেটা পড়া হবে।
import java.io.*;
public class DataStreamExample {
public static void main(String[] args) {
// ডেটা লেখার জন্য DataOutputStream ব্যবহার
try (DataOutputStream dos = new DataOutputStream(new FileOutputStream("data.dat"))) {
// বিভিন্ন প্রিমিটিভ ডেটা টাইপ লেখা
dos.writeInt(123); // int
dos.writeFloat(3.14f); // float
dos.writeBoolean(true); // boolean
dos.writeUTF("Hello, Java!"); // String (UTF format)
System.out.println("Data written to data.dat successfully.");
} catch (IOException e) {
e.printStackTrace();
}
// ডেটা পড়ার জন্য DataInputStream ব্যবহার
try (DataInputStream dis = new DataInputStream(new FileInputStream("data.dat"))) {
// DataInputStream থেকে ডেটা পড়া
int intValue = dis.readInt(); // int
float floatValue = dis.readFloat(); // float
boolean booleanValue = dis.readBoolean(); // boolean
String stringValue = dis.readUTF(); // String (UTF format)
// পড়া ডেটা প্রিন্ট করা
System.out.println("Read values from file:");
System.out.println("int: " + intValue);
System.out.println("float: " + floatValue);
System.out.println("boolean: " + booleanValue);
System.out.println("String: " + stringValue);
} catch (IOException e) {
e.printStackTrace();
}
}
}
ব্যাখ্যা:
- প্রথমে DataOutputStream ব্যবহার করে ফাইলে ডেটা লেখা হচ্ছে, যেমন
int,float,boolean, এবংString। - পরে DataInputStream ব্যবহার করে সেই ফাইল থেকে ডেটা পড়া হচ্ছে এবং সেগুলি কনসোলে প্রিন্ট করা হচ্ছে।
আউটপুট:
Data written to data.dat successfully.
Read values from file:
int: 123
float: 3.14
boolean: true
String: Hello, Java!
2. DataInputStream এবং DataOutputStream দিয়ে অবজেক্ট ডেটা লেখা এবং পড়া
এখানে আমরা DataOutputStream এবং DataInputStream ব্যবহার করে একটি serializable object ফাইলে লেখা এবং পড়ার উদাহরণ দেখাব।
import java.io.*;
class Person implements Serializable {
String name;
int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
}
public class ObjectDataStreamExample {
public static void main(String[] args) {
// ডেটা লেখার জন্য DataOutputStream ব্যবহার
try (DataOutputStream dos = new DataOutputStream(new FileOutputStream("person.dat"))) {
Person person = new Person("John", 30);
dos.writeUTF(person.name); // String লেখার জন্য writeUTF
dos.writeInt(person.age); // int লেখার জন্য writeInt
System.out.println("Person object written to file.");
} catch (IOException e) {
e.printStackTrace();
}
// ডেটা পড়ার জন্য DataInputStream ব্যবহার
try (DataInputStream dis = new DataInputStream(new FileInputStream("person.dat"))) {
String name = dis.readUTF(); // String পড়ার জন্য readUTF
int age = dis.readInt(); // int পড়ার জন্য readInt
Person person = new Person(name, age);
System.out.println("Person object read from file:");
System.out.println("Name: " + person.name);
System.out.println("Age: " + person.age);
} catch (IOException e) {
e.printStackTrace();
}
}
}
ব্যাখ্যা:
- এখানে Person নামক একটি ক্লাস ব্যবহার করা হয়েছে যার দুটি ফিল্ড (নাম এবং বয়স) রয়েছে।
- DataOutputStream ব্যবহার করে person.dat ফাইলে অবজেক্টের প্রপার্টি লেখা হচ্ছে।
- পরে DataInputStream ব্যবহার করে সেই ডেটা পড়ে Person অবজেক্ট পুনরুদ্ধার করা হচ্ছে।
আউটপুট:
Person object written to file.
Person object read from file:
Name: John
Age: 30
DataInputStream এবং DataOutputStream এর সুবিধা
- প্রিমিটিভ ডেটা টাইপের জন্য সুবিধাজনক: DataInputStream এবং DataOutputStream প্রিমিটিভ ডেটা টাইপ যেমন
int,float,booleanইত্যাদি এক্সচেঞ্জ করার জন্য খুবই কার্যকরী। - ফাইল ফরম্যাটের সঙ্গে সামঞ্জস্যপূর্ণ: তারা ফাইল থেকে বাইনারি ডেটা পড়তে এবং লিখতে সহায়ক, যা serialization এর জন্য উপযুক্ত।
- ফাইল পারফরম্যান্স বৃদ্ধি: এই ক্লাসগুলি byte stream এর চেয়ে বেশি দ্রুত এবং দক্ষভাবে প্রিমিটিভ ডেটা লিখতে ও পড়তে সক্ষম।
- DataInputStream এবং DataOutputStream ক্লাসগুলি binary data পড়া এবং লেখার জন্য অত্যন্ত উপকারী, বিশেষত যখন আপনি primitives (যেমন
int,float,boolean) এবং UTF strings দিয়ে কাজ করছেন। - এই ক্লাসগুলি সহজেই binary files তৈরি এবং পড়তে সাহায্য করে, এবং এগুলি Java I/O সিস্টেমের গুরুত্বপূর্ণ অংশ হিসেবে কাজ করে।
DataInputStream এবং DataOutputStream এর মাধ্যমে ডেটা স্ট্রিমে লেখার সময় Endianess বা character encoding সঠিকভাবে পরিচালনা করা গুরুত্বপূর্ণ, যাতে ডেটা অপসারণ বা পুনরুদ্ধারের সময় কোনো ত্রুটি না ঘটে।
Read more