উদাহরণ সহ Piped Streams এর বাস্তবায়ন

PipedInputStream এবং PipedOutputStream - জাভা আইও (Java.io Package) - Java Technologies

300

Piped Streams হল Java I/O প্যাকেজের অংশ যা এক থ্রেড থেকে অন্য থ্রেডে ডেটা আদান-প্রদান করার জন্য ব্যবহৃত হয়। এগুলি মূলত Inter-Thread Communication (IPC) এর জন্য ব্যবহৃত হয়, যেখানে এক থ্রেড থেকে PipedOutputStream এবং অন্য থ্রেডে PipedInputStream দিয়ে ডেটা পাঠানো হয় এবং পড়া হয়।

PipedInputStream এবং PipedOutputStream একে অপরের সাথে যুক্ত থাকে এবং তারা বাইনারি ডেটা পাঠাতে এবং গ্রহণ করতে পারে। এর মাধ্যমে এক থ্রেড ডেটা প্রেরণ করে এবং অন্য থ্রেড সেই ডেটা গ্রহণ করে।

Piped Streams এর ধারণা:

  1. PipedOutputStream:
    • এটি একটি আউটপুট স্ট্রীম হিসেবে কাজ করে যা ডেটা পাইপের মাধ্যমে পাঠায়।
  2. PipedInputStream:
    • এটি একটি ইনপুট স্ট্রীম হিসেবে কাজ করে যা পাঠানো ডেটাকে গ্রহণ করে।

এগুলি সাধারনত একে অপরের সাথে connect() মেথডের মাধ্যমে সংযুক্ত থাকে। PipedOutputStream একটি PipedInputStream এর মাধ্যমে ডেটা পাঠাতে পারে এবং PipedInputStream সেই ডেটা পড়ে।


Piped Streams উদাহরণ:

এই উদাহরণে, আমরা একটি Producer থ্রেড তৈরি করব যা PipedOutputStream এর মাধ্যমে ডেটা পাঠাবে, এবং একটি Consumer থ্রেড তৈরি করব যা সেই ডেটা PipedInputStream এর মাধ্যমে গ্রহণ করবে।

Piped Streams Example: Producer and Consumer

import java.io.*;

public class PipedStreamExample {
    public static void main(String[] args) {
        // PipedOutputStream এবং PipedInputStream তৈরি করা
        PipedOutputStream outputStream = new PipedOutputStream();
        PipedInputStream inputStream = new PipedInputStream();

        try {
            // PipedInputStream এবং PipedOutputStream সংযুক্ত করা
            inputStream.connect(outputStream);

            // Producer থ্রেড তৈরি করা
            Thread producerThread = new Thread(new Producer(outputStream));
            // Consumer থ্রেড তৈরি করা
            Thread consumerThread = new Thread(new Consumer(inputStream));

            // থ্রেড চালানো
            producerThread.start();
            consumerThread.start();

        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    // Producer থ্রেড, যা PipedOutputStream এর মাধ্যমে ডেটা পাঠাবে
    static class Producer implements Runnable {
        private PipedOutputStream out;

        public Producer(PipedOutputStream out) {
            this.out = out;
        }

        @Override
        public void run() {
            try {
                String message = "Hello, Consumer!";
                out.write(message.getBytes()); // ডেটা পাঠানো হচ্ছে
                System.out.println("Producer sent: " + message);
                out.close(); // আউটপুট স্ট্রীম বন্ধ করা
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

    // Consumer থ্রেড, যা PipedInputStream এর মাধ্যমে ডেটা পড়বে
    static class Consumer implements Runnable {
        private PipedInputStream in;

        public Consumer(PipedInputStream in) {
            this.in = in;
        }

        @Override
        public void run() {
            try {
                byte[] buffer = new byte[1024];
                int length = in.read(buffer); // ডেটা পড়া হচ্ছে
                String message = new String(buffer, 0, length);
                System.out.println("Consumer received: " + message);
                in.close(); // ইনপুট স্ট্রীম বন্ধ করা
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

ব্যাখ্যা:

  1. PipedOutputStream এবং PipedInputStream তৈরি করা হয়েছে।
  2. connect() মেথড ব্যবহার করে দুটি স্ট্রীমকে একে অপরের সাথে সংযুক্ত করা হয়েছে।
  3. একটি Producer থ্রেড তৈরি করা হয়েছে যা PipedOutputStream এর মাধ্যমে "Hello, Consumer!" বার্তাটি পাঠাবে।
  4. একটি Consumer থ্রেড তৈরি করা হয়েছে যা PipedInputStream এর মাধ্যমে পাঠানো ডেটা গ্রহণ করবে এবং প্রিন্ট করবে।

আউটপুট:

Producer sent: Hello, Consumer!
Consumer received: Hello, Consumer!

Piped Streams এর সুবিধা:

  1. Inter-Thread Communication:
    • PipedStreams থ্রেডের মধ্যে ডেটা আদান-প্রদান করতে সহায়ক। এটি Producer-Consumer প্যাটার্নে ব্যবহৃত হয়, যেখানে একটি থ্রেড ডেটা তৈরি করে এবং অন্য থ্রেড সেই ডেটা গ্রহণ করে।
  2. Efficiency:
    • Piped Streams কেবলমাত্র ডেটা প্রেরণের জন্য ব্যবহৃত হয়, সুতরাং এটি দ্রুত এবং memory efficient হয়।
  3. Real-Time Data Transfer:
    • এটি একধরণের real-time data transfer তৈরি করে যেখানে একটি থ্রেড ডেটা পাঠাতে শুরু করে এবং অন্য থ্রেড তা গ্রহণ করে, এভাবে থ্রেডগুলো একে অপরের সাথে কাজ করতে পারে।

Piped Streams এর সীমাবদ্ধতা:

  1. Blocking I/O:
    • PipedInputStream যখন PipedOutputStream এর ডেটা পাচ্ছে না, তখন এটি blocking I/O এর মতো আচরণ করে, অর্থাৎ এটি wait করবে যতক্ষণ না পিপড আউটপুট স্ট্রীমে ডেটা আসে।
  2. Single Producer-Consumer Model:
    • PipedOutputStream কেবল একটি PipedInputStream এর সাথে সংযুক্ত হতে পারে। তাই এটি একমাত্র Producer-Consumer মডেলের জন্য উপযুক্ত।
  3. Memory Usage:
    • PipedInputStream এবং PipedOutputStream অনেকটা একটি ফিফো (FIFO) বাফারের মতো কাজ করে, কিন্তু এতে অতিরিক্ত মেমরি ব্যবহৃত হতে পারে যখন অনেক ডেটা পাঠানো বা গ্রহণ করা হয়।

Piped Streams হল একটি কার্যকরী পদ্ধতি যা একাধিক থ্রেডের মধ্যে ডেটা আদান-প্রদান করতে সাহায্য করে। PipedInputStream এবং PipedOutputStream একে অপরের সাথে যুক্ত থাকে এবং একটি থ্রেড output দেয় এবং অন্য থ্রেড সেই input গ্রহণ করে। এই ধরনের স্ট্রীম সাধারণত Producer-Consumer প্যাটার্নে ব্যবহৃত হয়।

যদিও Piped Streams খুবই কার্যকর, তবে এটি blocking I/O এবং single producer-consumer model এর সীমাবদ্ধতা নিয়ে আসে।

Content added By
Promotion

Are you sure to start over?

Loading...