Java I/O এর বেসিক আর্কিটেকচার

Java.io প্যাকেজের পরিচিতি - জাভা টাপল (Java Tuples) - Java Technologies

457

Java Input/Output (Java I/O) একটি ডেটা ট্রান্সফার ফ্রেমওয়ার্ক, যা ডেটা পড়া এবং লেখা পরিচালনা করতে ব্যবহৃত হয়। এটি স্ট্রিম-ভিত্তিক ডেটা প্রসেসিং এর জন্য ডিজাইন করা হয়েছে এবং ফাইল, নেটওয়ার্ক, মেমরি বা অন্যান্য সোর্স থেকে ডেটা প্রক্রিয়াকরণে কার্যকর।


Java I/O এর মূল উপাদানসমূহ

Java I/O এর আর্কিটেকচার Stream ধারণার উপর ভিত্তি করে কাজ করে। এটি Input Stream এবং Output Stream দ্বারা দুটি প্রধান শ্রেণিতে বিভক্ত।

১. Streams:

  • Input Stream: ডেটা পড়ার জন্য ব্যবহৃত হয়।
  • Output Stream: ডেটা লেখার জন্য ব্যবহৃত হয়।
  • Streams ফাইল, মেমরি, বা নেটওয়ার্কের মাধ্যমে ডেটা পাঠানোর জন্য কার্যকর।

২. Byte Streams এবং Character Streams

Java I/O দুটি প্রকারের স্ট্রিম সমর্থন করে:

  1. Byte Streams: বাইনারি ডেটা (byte-based) পড়া বা লেখার জন্য ব্যবহৃত হয়। উদাহরণ: FileInputStream, FileOutputStream
  2. Character Streams: টেক্সট ডেটা (character-based) পড়া বা লেখার জন্য ব্যবহৃত হয়। উদাহরণ: FileReader, FileWriter

৩. Buffering:

Buffered স্ট্রিমগুলি বড় ডেটা প্রক্রিয়াকরণে কর্মক্ষমতা বাড়ায়। উদাহরণ:

  • BufferedReader
  • BufferedWriter

৪. Data Streams:

DataInputStream এবং DataOutputStream প্রিমিটিভ টাইপের ডেটা পড়তে এবং লিখতে ব্যবহৃত হয়।

৫. Object Streams:

ObjectInputStream এবং ObjectOutputStream অবজেক্ট সিরিয়ালাইজ এবং ডেসিরিয়ালাইজ করতে ব্যবহৃত হয়।

৬. NIO (New I/O):

Java NIO (introduced in Java 1.4) অ-প্রতিবন্ধক I/O এবং উচ্চ-পরিমাণ ডেটা প্রক্রিয়াকরণ সমর্থন করে।


Java I/O এর আর্কিটেকচারের মূল শ্রেণিগুলি

১. Byte Stream Classes

ClassDescription
InputStreamInput (byte-based) এর মূল ক্লাস।
FileInputStreamফাইল থেকে ডেটা পড়ার জন্য ব্যবহৃত।
OutputStreamOutput (byte-based) এর মূল ক্লাস।
FileOutputStreamফাইলে ডেটা লেখার জন্য ব্যবহৃত।

২. Character Stream Classes

ClassDescription
ReaderInput (character-based) এর মূল ক্লাস।
FileReaderফাইল থেকে টেক্সট পড়ার জন্য ব্যবহৃত।
WriterOutput (character-based) এর মূল ক্লাস।
FileWriterফাইলে টেক্সট লেখার জন্য ব্যবহৃত।

৩. Buffered Classes

ClassDescription
BufferedReaderটেক্সট ডেটা পড়ার জন্য বাফার যোগ করে।
BufferedWriterটেক্সট ডেটা লেখার জন্য বাফার যোগ করে।

৪. Data Stream Classes

ClassDescription
DataInputStreamপ্রিমিটিভ ডেটা পড়ার জন্য ব্যবহৃত।
DataOutputStreamপ্রিমিটিভ ডেটা লেখার জন্য ব্যবহৃত।

৫. Object Stream Classes

ClassDescription
ObjectInputStreamঅবজেক্ট পড়ার জন্য ব্যবহৃত।
ObjectOutputStreamঅবজেক্ট লেখার জন্য ব্যবহৃত।

Java I/O এর কার্যপদ্ধতি

Step 1: Input এবং Output Stream তৈরি

Input এবং Output Stream তৈরি করতে সংশ্লিষ্ট ক্লাস ব্যবহার করুন।

Example: Byte Stream

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class ByteStreamExample {
    public static void main(String[] args) {
        try (FileInputStream fis = new FileInputStream("input.txt");
             FileOutputStream fos = new FileOutputStream("output.txt")) {

            int data;
            while ((data = fis.read()) != -1) {
                fos.write(data);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

Step 2: Buffering ব্যবহার করুন

Buffered Classes ব্যবহার করে বড় ডেটা প্রক্রিয়াকরণে কর্মক্ষমতা বাড়ান।

Example: BufferedReader এবং BufferedWriter

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

public class BufferedStreamExample {
    public static void main(String[] args) {
        try (BufferedReader reader = new BufferedReader(new FileReader("input.txt"));
             BufferedWriter writer = new BufferedWriter(new FileWriter("output.txt"))) {

            String line;
            while ((line = reader.readLine()) != null) {
                writer.write(line);
                writer.newLine();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

Step 3: Object Serialization এবং Deserialization

অবজেক্ট স্টোর বা রিস্টোর করতে ObjectOutputStream এবং ObjectInputStream ব্যবহার করুন।

Example: Object Serialization

import java.io.*;

class Person implements Serializable {
    private String name;
    private int age;

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    @Override
    public String toString() {
        return "Person{name='" + name + "', age=" + age + '}';
    }
}

public class ObjectStreamExample {
    public static void main(String[] args) {
        try (ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("person.dat"));
             ObjectInputStream ois = new ObjectInputStream(new FileInputStream("person.dat"))) {

            // Serialize
            Person person = new Person("Alice", 25);
            oos.writeObject(person);

            // Deserialize
            Person deserializedPerson = (Person) ois.readObject();
            System.out.println("Deserialized: " + deserializedPerson);
        } catch (IOException | ClassNotFoundException e) {
            e.printStackTrace();
        }
    }
}

Java NIO (New I/O) এর ভূমিকা

Java NIO (introduced in Java 1.4) অ-প্রতিবন্ধক (Non-blocking) এবং উচ্চ-পারফরম্যান্স ডেটা প্রক্রিয়াকরণের জন্য ব্যবহৃত হয়।

NIO এর মূল ধারণা

  • Channels: ডেটা ট্রান্সমিশনের জন্য।
  • Buffers: ডেটা সংরক্ষণের জন্য।
  • Selectors: Multiple Channels পরিচালনার জন্য।

Example: FileChannel

import java.io.RandomAccessFile;
import java.nio.channels.FileChannel;

public class NIOExample {
    public static void main(String[] args) throws Exception {
        RandomAccessFile file = new RandomAccessFile("data.txt", "rw");
        FileChannel channel = file.getChannel();

        // Perform operations with the channel
        System.out.println("File size: " + channel.size());
        channel.close();
        file.close();
    }
}

Java I/O এর সুবিধা এবং সীমাবদ্ধতা

সুবিধাসীমাবদ্ধতা
বিভিন্ন সোর্স থেকে ডেটা পড়া এবং লেখা সহজ।বড় ডেটা প্রসেসিংয়ের জন্য পারফরম্যান্স সমস্যা।
Character এবং Byte Stream এর মাধ্যমে ফ্লেক্সিবিলিটি।NIO তুলনায় কিছু ক্ষেত্রে ধীর।
Object Serialization সমর্থন।Custom Serialization এর জন্য অতিরিক্ত কাজ।

Java I/O এর বেসিক আর্কিটেকচার ব্যবহার করে ডেটা ট্রান্সফার এবং প্রসেসিং সহজ:

  1. Byte এবং Character Stream ডেটা প্রক্রিয়াকরণের জন্য কার্যকর।
  2. Buffered Stream বড় ডেটার জন্য উপযুক্ত।
  3. Object Serialization অবজেক্ট সংরক্ষণ এবং পুনরুদ্ধারের জন্য কার্যকর।
  4. বড় স্কেল অ্যাপ্লিকেশন বা রিয়েল-টাইম প্রক্রিয়ার জন্য Java NIO বিবেচনা করুন।
Content added By
Promotion

Are you sure to start over?

Loading...