BoundedBuffer, CircularFifoBuffer এবং UnboundedFifoBuffer

Java Technologies - অ্যাপাচি কমন্স কালেকশনস (Apache Common Collection) Buffer এবং Queue Collection Classes |
143
143

Apache Commons Collections লাইব্রেরি একাধিক বিশেষ ধরনের ডেটা স্ট্রাকচার সরবরাহ করে, যেগুলি বিশেষ পরিস্থিতিতে কাজ করার জন্য তৈরি করা হয়। এই ডেটা স্ট্রাকচারগুলির মধ্যে BoundedBuffer, CircularFifoBuffer, এবং UnboundedFifoBuffer উল্লেখযোগ্য। এগুলি মূলত FIFO (First-In, First-Out) পদ্ধতিতে কাজ করে এবং এগুলোর ব্যবহারের ক্ষেত্রে আপনার নির্দিষ্ট প্রয়োজন অনুযায়ী বাউন্ডেড (সীমাবদ্ধ) অথবা আনবাউন্ডেড (সীমাহীন) বাফার প্রয়োজন হতে পারে।

1. BoundedBuffer

BoundedBuffer একটি বাফার যা একটি নির্দিষ্ট আকারে সীমাবদ্ধ। এর মানে হল যে এটি একটি নির্দিষ্ট সীমা নির্ধারণ করে এবং যখন বাফার পূর্ণ হয়ে যায়, তখন নতুন উপাদান প্রবেশ করতে গেলে পুরনো উপাদানগুলো সরিয়ে ফেলা হয়। এটি সাধারণত producer-consumer প্যাটার্নে ব্যবহৃত হয় যেখানে একটি প্রোডিউসার (producer) উপাদান প্রদান করে এবং কনজিউমার (consumer) সেগুলি গ্রহণ করে।

BoundedBuffer এর বৈশিষ্ট্য:

  • Synchronized: এটি থ্রেড-সেফ এবং একাধিক থ্রেডের মধ্যে নিরাপদভাবে কাজ করতে পারে।
  • Fixed Size: এটি একটি নির্দিষ্ট আকারের বাফার তৈরি করে, যখন আকার পূর্ণ হয়, তখন পুরনো উপাদানগুলিকে সরিয়ে নতুন উপাদান গ্রহণ করে।
  • Producer-Consumer Model: এটি প্রোডিউসার এবং কনজিউমার মডেলে ব্যবহৃত হয় যেখানে উপাদানগুলো একে অপরকে প্রদান বা গ্রহণ করতে থাকে।

BoundedBuffer উদাহরণ:

import org.apache.commons.collections4.buffer.BoundedBuffer;
import org.apache.commons.collections4.buffer.CircularFifoBuffer;

public class BoundedBufferExample {
    public static void main(String[] args) {
        // Create a BoundedBuffer of size 3
        BoundedBuffer<String> buffer = new CircularFifoBuffer<>(3);

        // Add elements
        buffer.add("apple");
        buffer.add("banana");
        buffer.add("orange");

        // At this point, the buffer is full. Adding a new element will remove the oldest element
        buffer.add("grape");

        // Print the buffer contents
        System.out.println("Buffer Contents: " + buffer);
    }
}

Output:

Buffer Contents: [banana, orange, grape]

ব্যাখ্যা:

  • এখানে, BoundedBuffer এর আকার ৩ নির্ধারণ করা হয়েছে, এবং এর মধ্যে সর্বোচ্চ ৩টি উপাদান থাকতে পারে।
  • যখন grape যোগ করা হয়, তখন apple সরিয়ে ফেলা হয়, কারণ বাফার পূর্ণ হয়ে গেছে।

2. CircularFifoBuffer

CircularFifoBuffer একটি বিশেষ ধরনের বাফার যা একটি সীমিত আকারে উপাদান ধারণ করে এবং FIFO (First-In, First-Out) পদ্ধতিতে কাজ করে। যখন বাফার পূর্ণ হয় এবং নতুন উপাদান যোগ করা হয়, তখন প্রথম যোগ করা উপাদানটি (oldest element) সরিয়ে ফেলা হয়। এটি একটি বাউন্ডেড বাফার, যেখানে ডেটা একটি circular queue এর মতো সঞ্চালিত হয়।

CircularFifoBuffer এর বৈশিষ্ট্য:

  • Fixed Size: এটি একটি নির্দিষ্ট আকারের বাফার ব্যবহার করে।
  • FIFO: পুরনো উপাদানকে সরিয়ে নতুন উপাদান গ্রহণ করে।
  • Efficient: এটি দ্রুতভাবে নতুন উপাদানগুলিকে যোগ এবং পুরনো উপাদানগুলিকে সরিয়ে দেয়।

CircularFifoBuffer উদাহরণ:

import org.apache.commons.collections4.buffer.CircularFifoBuffer;

public class CircularFifoBufferExample {
    public static void main(String[] args) {
        // Create a CircularFifoBuffer of size 3
        CircularFifoBuffer<String> buffer = new CircularFifoBuffer<>(3);

        // Add elements
        buffer.add("apple");
        buffer.add("banana");
        buffer.add("orange");

        // At this point, the buffer is full. Adding a new element will remove the oldest element
        buffer.add("grape");

        // Print the buffer contents
        System.out.println("CircularFifoBuffer Contents: " + buffer);
    }
}

Output:

CircularFifoBuffer Contents: [banana, orange, grape]

ব্যাখ্যা:

  • CircularFifoBuffer এর আকার ৩ নির্ধারণ করা হয়েছে এবং এতে সর্বোচ্চ ৩টি উপাদান থাকতে পারে।
  • যখন grape যোগ করা হয়, তখন apple সরিয়ে ফেলা হয়, কারণ এটি বাফারের সবচেয়ে পুরনো উপাদান।

3. UnboundedFifoBuffer

UnboundedFifoBuffer একটি FIFO (First-In, First-Out) বাফার যা কোনও আকারের সীমা ছাড়াই উপাদান ধারণ করতে পারে। এর মানে হল যে এটি কোনও নির্দিষ্ট সীমার মধ্যে সীমাবদ্ধ নয় এবং ইনপুট হিসাবে যতটুকু ডেটা আসে তা সরাসরি গ্রহণ করে।

UnboundedFifoBuffer এর বৈশিষ্ট্য:

  • Unbounded: এটি আকারের সীমা ছাড়াই ডেটা ধারণ করতে পারে।
  • FIFO: এটি FIFO পদ্ধতিতে কাজ করে, অর্থাৎ প্রথমে যোগ করা উপাদানটি প্রথমে বের হয়ে আসে।
  • Dynamic Size: এটি ডেটার আকারের উপর নির্ভর করে আকার বাড়াতে বা কমাতে পারে।

UnboundedFifoBuffer উদাহরণ:

import org.apache.commons.collections4.buffer.UnboundedFifoBuffer;

public class UnboundedFifoBufferExample {
    public static void main(String[] args) {
        // Create an UnboundedFifoBuffer
        UnboundedFifoBuffer<String> buffer = new UnboundedFifoBuffer<>();

        // Add elements
        buffer.add("apple");
        buffer.add("banana");
        buffer.add("orange");

        // Adding more elements, no size limit
        buffer.add("grape");
        buffer.add("kiwi");

        // Print the buffer contents
        System.out.println("UnboundedFifoBuffer Contents: " + buffer);
    }
}

Output:

UnboundedFifoBuffer Contents: [apple, banana, orange, grape, kiwi]

ব্যাখ্যা:

  • UnboundedFifoBuffer আকারের কোনও সীমা ছাড়াই উপাদান ধারণ করতে পারে, এবং এটি FIFO পদ্ধতিতে কাজ করে।
  • এখানে, কোন উপাদান সরানো হয় না কারণ এটি একটি আনবাউন্ডেড বাফার এবং এতে যতটুকু উপাদান আসে, ততটুকু সঞ্চিত থাকে।

BoundedBuffer, CircularFifoBuffer, এবং UnboundedFifoBuffer এর মধ্যে পার্থক্য:

FeatureBoundedBufferCircularFifoBufferUnboundedFifoBuffer
Size LimitFixed size (bounded)Fixed size (bounded)No size limit (unbounded)
Data RemovalRemoves the oldest element when fullRemoves the oldest element when fullNo removal needed, grows dynamically
FIFOYes, maintains first-in, first-out orderYes, maintains first-in, first-out orderYes, maintains first-in, first-out order
UsageUseful for fixed-size data buffer in producer-consumer modelsUseful for scenarios where data is cyclic and old data is replacedUseful for scenarios where the data buffer is unlimited
MemoryLimited memory usage based on fixed sizeFixed memory usage based on buffer sizeDynamic memory usage based on data volume

Conclusion

BoundedBuffer, CircularFifoBuffer, এবং UnboundedFifoBuffer হল FIFO (First-In, First-Out) বাফারগুলির বিভিন্ন ধরনের বাস্তবায়ন যা Apache Commons Collections লাইব্রেরি সরবরাহ করে।

  • BoundedBuffer একটি নির্দিষ্ট আকারে সীমাবদ্ধ বাফার, যা পুরনো উপাদানগুলি সরিয়ে নতুন উপাদান গ্রহণ করে।
  • CircularFifoBuffer একটি নির্দিষ্ট আকারের সাইক্লিক বাফার, যা FIFO পদ্ধতিতে কাজ করে এবং যখন এটি পূর্ণ হয় তখন পুরনো উপাদানগুলি সরিয়ে ফেলে।
  • UnboundedFifoBuffer আকারের সীমা ছাড়াই উপাদান ধারণ করে এবং FIFO পদ্ধতিতে চলতে থাকে।

এই বাফারগুলির মধ্যে পার্থক্য বুঝে আপনি আপনার প্রজেক্টের প্রয়োজন অনুযায়ী উপযুক্ত বাফার নির্বাচন করতে পারবেন।

common.content_added_by
টপ রেটেড অ্যাপ

স্যাট অ্যাকাডেমী অ্যাপ

আমাদের অল-ইন-ওয়ান মোবাইল অ্যাপের মাধ্যমে সীমাহীন শেখার সুযোগ উপভোগ করুন।

ভিডিও
লাইভ ক্লাস
এক্সাম
ডাউনলোড করুন
Promotion