InputStream এবং OutputStream ক্লাসের ভূমিকা

Byte Streams এবং Character Streams এর ধারণা - জাভা টাপল (Java Tuples) - Java Technologies

376

InputStream এবং OutputStream ক্লাস হল জাভার I/O System এর বেসিক ক্লাস, যা java.io প্যাকেজের অংশ। এই ক্লাস দুটি Byte Streams-এর মাধ্যমে ডেটা প্রবাহ (streaming) পরিচালনা করে। InputStream ডেটা পড়ার জন্য এবং OutputStream ডেটা লেখার জন্য ব্যবহৃত হয়।


InputStream ক্লাসের ভূমিকা

  • InputStream ডেটা বাইট আকারে পড়তে ব্যবহৃত হয়।
  • এটি একটি অ্যাবস্ট্রাক্ট ক্লাস, যা বিভিন্ন ডেটা সোর্স (যেমন ফাইল, নেটওয়ার্ক, বা মেমোরি) থেকে ডেটা পড়ার জন্য সাবক্লাস প্রদান করে।

InputStream এর গুরুত্বপূর্ণ মেথড:

মেথডবিবরণ
int read()একটি বাইট পড়ে এবং এটিকে রিটার্ন করে। EOF (-1) হলে -1 রিটার্ন।
int read(byte[] b)একটি বাফারে একাধিক বাইট পড়ে।
int available()ইনপুট স্ট্রিমে পড়ার জন্য কতটুকু ডেটা রয়েছে তা জানায়।
void close()স্ট্রিম বন্ধ করে।

InputStream এর সাব-ক্লাস:

  1. FileInputStream: একটি ফাইল থেকে ডেটা পড়ে।
  2. BufferedInputStream: ডেটা পড়ার গতি বাড়ানোর জন্য বাফারিং করে।
  3. ByteArrayInputStream: একটি বাইট অ্যারে থেকে ডেটা পড়ে।

OutputStream ক্লাসের ভূমিকা

  • OutputStream ডেটা বাইট আকারে গন্তব্যে লেখার জন্য ব্যবহৃত হয়।
  • এটি একটি অ্যাবস্ট্রাক্ট ক্লাস, যা বিভিন্ন গন্তব্যে (যেমন ফাইল, নেটওয়ার্ক, বা মেমোরি) ডেটা লেখার জন্য সাবক্লাস প্রদান করে।

OutputStream এর গুরুত্বপূর্ণ মেথড:

মেথডবিবরণ
void write(int b)একটি বাইট গন্তব্যে লেখে।
void write(byte[] b)একটি বাফার থেকে ডেটা লেখে।
void flush()স্ট্রিমে জমা থাকা সমস্ত ডেটা গন্তব্যে পাঠায়।
void close()স্ট্রিম বন্ধ করে।

OutputStream এর সাব-ক্লাস:

  1. FileOutputStream: একটি ফাইলে ডেটা লেখে।
  2. BufferedOutputStream: ডেটা লেখার গতি বাড়ানোর জন্য বাফারিং করে।
  3. ByteArrayOutputStream: একটি বাইট অ্যারেতে ডেটা লেখে।

InputStream এবং OutputStream ব্যবহারিক উদাহরণ

১. ফাইল থেকে ডেটা পড়া (InputStream ব্যবহার করে)

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

public class InputStreamExample {
    public static void main(String[] args) {
        try (FileInputStream fis = new FileInputStream("input.txt")) {
            int byteData;
            while ((byteData = fis.read()) != -1) {
                System.out.print((char) byteData); // বাইটকে ক্যারেক্টারে কনভার্ট করে প্রিন্ট
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

উদাহরণ ফাইল (input.txt):

This is a test file.

আউটপুট:

This is a test file.

২. ফাইলে ডেটা লেখা (OutputStream ব্যবহার করে)

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

public class OutputStreamExample {
    public static void main(String[] args) {
        String data = "This is a test output.";

        try (FileOutputStream fos = new FileOutputStream("output.txt")) {
            fos.write(data.getBytes()); // String থেকে বাইট অ্যারে রূপান্তর করে লেখে
            System.out.println("Data written to file successfully.");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

ফলাফল (output.txt):

This is a test output.

৩. InputStream এবং OutputStream ব্যবহার করে ফাইল কপি করা

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

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

            int byteData;
            while ((byteData = fis.read()) != -1) {
                fos.write(byteData); // ইনপুট থেকে পড়ে আউটপুটে লেখে
            }

            System.out.println("File copied successfully.");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

ফলাফল:

  • input.txt এর কন্টেন্ট copy.txt-এ কপি হবে।

InputStream এবং OutputStream বনাম Character Streams

বিষয়InputStream/OutputStreamReader/Writer (Character Streams)
ডেটা টাইপবাইট (8-bit)।ক্যারেক্টার (16-bit)।
ব্যবহার ক্ষেত্রবাইনারি ডেটা (ইমেজ, ভিডিও, অডিও)।টেক্সট ডেটা (String বা টেক্সট ফাইল)।
ক্লাসInputStream, OutputStream।Reader, Writer।
উদ্দেশ্যবাইনারি ডেটার জন্য।টেক্সট ডেটার জন্য।

Tuple এর সাথে InputStream এবং OutputStream এর ব্যবহার

Tuple ব্যবহার করে ফাইলের ডেটা এবং আকার সংরক্ষণ

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

class Tuple<T1, T2> {
    private final T1 first;
    private final T2 second;

    public Tuple(T1 first, T2 second) {
        this.first = first;
        this.second = second;
    }

    public T1 getFirst() {
        return first;
    }

    public T2 getSecond() {
        return second;
    }
}

public class TupleStreamExample {
    public static void main(String[] args) {
        Tuple<String, Integer> fileData = readFile("input.txt");
        System.out.println("File Content: " + fileData.getFirst());
        System.out.println("File Size: " + fileData.getSecond() + " bytes");
    }

    public static Tuple<String, Integer> readFile(String filePath) {
        StringBuilder content = new StringBuilder();
        int size = 0;

        try (FileInputStream fis = new FileInputStream(filePath)) {
            int byteData;
            while ((byteData = fis.read()) != -1) {
                content.append((char) byteData);
                size++;
            }
        } catch (IOException e) {
            e.printStackTrace();
        }

        return new Tuple<>(content.toString(), size);
    }
}

আউটপুট:

File Content: This is a test file.
File Size: 20 bytes

InputStream এবং OutputStream এর সুবিধা

  1. Binary Data Support: ইমেজ, ভিডিও এবং অন্যান্য বাইনারি ডেটা পরিচালনা করতে কার্যকর।
  2. Performance: বড় বাইনারি ফাইল পরিচালনায় দক্ষ।
  3. Flexibility: বিভিন্ন ডেটা সোর্স এবং গন্তব্যের সাথে সংযুক্ত হতে সক্ষম।

InputStream এবং OutputStream এর সীমাবদ্ধতা

  1. Low-Level API: Character Streams এর তুলনায় ব্যবহার করতে বেশি কোড প্রয়োজন।
  2. Text Data Handling: টেক্সট ফাইল পরিচালনার জন্য অতিরিক্ত কনভার্সন প্রয়োজন।
  3. Buffering Required: বড় ফাইল পরিচালনার সময় বাফারিং ব্যবহার করতে হয়।

InputStream এবং OutputStream জাভার I/O সিস্টেমে বেসিক ভূমিকা পালন করে। এগুলো প্রধানত বাইনারি ডেটা পরিচালনার জন্য ব্যবহৃত হয়।

  • ছোট বা বড় ফাইলের ডেটা পড়া বা লেখার জন্য এটি কার্যকর।
  • টেক্সট ডেটার ক্ষেত্রে Character Streams (Reader/Writer) ব্যবহার করা ভালো।

Tuple Integration: InputStream বা OutputStream থেকে পড়া ডেটা এবং অন্যান্য প্রোপার্টি (যেমন আকার) সংরক্ষণ করতে Tuples কার্যকরভাবে ব্যবহার করা যায়।

Content added By
Promotion

Are you sure to start over?

Loading...