PushbackInputStream এবং PushbackReader

জাভা আইও (Java.io Package) - Java Technologies

268

PushbackInputStream এবং PushbackReader হল Java I/O প্যাকেজের ক্লাস যা স্ট্রীম বা রিডারে বাফার ব্যবহার করে পড়া এবং লেখার সময় পুশব্যাক ফিচার প্রদান করে। এগুলি মূলত ডেটা পড়ার সময় যদি কোনো বিশেষ অংশ ভুলভাবে পড়ে যায় বা পুনরায় পড়ার প্রয়োজন হয়, তবে সেই অংশটি পুশব্যাক করতে সাহায্য করে।

Pushback প্রযুক্তি মূলত যখন আপনি কোনো ইনপুট স্ট্রীম বা রিডারে ডেটা পড়ছেন এবং একটি ভুল বা অপ্রয়োজনীয় অংশ পড়ে ফেলছেন, তখন সেই অংশটিকে পুশব্যাক করতে বা ফিরে পাঠাতে সাহায্য করে। এই ক্লাসগুলি প্রধানত tokenization বা lexical analysis এর জন্য ব্যবহৃত হয়, যেখানে ডেটার কোনো নির্দিষ্ট অংশকে আবার স্ট্রীমে পাঠানো প্রয়োজন।


PushbackInputStream এবং PushbackReader এর ধারণা:

  1. PushbackInputStream:
    • PushbackInputStream একটি byte stream যা InputStream এর একটি সাবক্লাস। এটি ইনপুট স্ট্রীম থেকে ডেটা পড়ার সময় push back বা re-read করার সুযোগ দেয়।
    • এটি সাধারণত read() মেথডের মাধ্যমে ডেটা পড়ে এবং unread(byte[] b) মেথডের মাধ্যমে পুনরায় সেই ডেটা স্ট্রীমে ফিরিয়ে দেয়।
  2. PushbackReader:
    • PushbackReader একটি character stream যা Reader এর একটি সাবক্লাস। এটি character-based input পড়ার সময় push back সুবিধা প্রদান করে। এটি push back করার জন্য unread() মেথড ব্যবহার করে, যেটি পড়া ডেটাকে ফেরত পাঠায়।

PushbackInputStream এর ব্যবহার:

PushbackInputStream ক্লাসে ডেটা পড়ার পর, যদি কিছু ডেটা ভুল পড়ে যায় বা পুনরায় পড়ার প্রয়োজন হয়, তাহলে unread(byte[] b) মেথড ব্যবহার করে ডেটাকে পুনরায় স্ট্রীমে পাঠানো যায়।

PushbackInputStream উদাহরণ:

import java.io.*;

public class PushbackInputStreamExample {
    public static void main(String[] args) {
        try (PushbackInputStream pushbackInputStream = new PushbackInputStream(new FileInputStream("example.txt"))) {
            byte[] buffer = new byte[10];
            int bytesRead;

            while ((bytesRead = pushbackInputStream.read(buffer)) != -1) {
                String data = new String(buffer, 0, bytesRead);
                System.out.println("Read data: " + data);

                // যদি কোনো বিশেষ চিহ্ন পড়া হয়, তবে Pushback করা হবে
                if (data.contains("error")) {
                    System.out.println("Error detected! Pushing back the data...");
                    pushbackInputStream.unread(buffer, 0, bytesRead); // push back the data
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

ব্যাখ্যা:

  • PushbackInputStream ব্যবহার করে example.txt ফাইল থেকে ডেটা পড়া হচ্ছে।
  • যদি "error" শব্দটি পড়া হয়, তবে ডেটাটি pushback করা হয় এবং পুনরায় পড়া হতে পারে।

PushbackReader এর ব্যবহার:

PushbackReader ক্লাসে আপনি character stream থেকে ডেটা পড়ার পর, একটি নির্দিষ্ট অংশ আবার পড়ার জন্য unread() মেথড ব্যবহার করতে পারেন। এটি সাধারণত text data বিশ্লেষণ এবং tokenization কাজে ব্যবহৃত হয়।

PushbackReader উদাহরণ:

import java.io.*;

public class PushbackReaderExample {
    public static void main(String[] args) {
        try (PushbackReader pushbackReader = new PushbackReader(new FileReader("example.txt"))) {
            int character;
            while ((character = pushbackReader.read()) != -1) {
                char readChar = (char) character;
                System.out.print(readChar);

                // যদি একটি বিশেষ অক্ষর বা শব্দ পড়া হয়, তবে পুশব্যাক করা হবে
                if (readChar == 'x') {
                    System.out.println("\nCharacter 'x' found! Pushing back...");
                    pushbackReader.unread('x'); // push back the character 'x'
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

ব্যাখ্যা:

  • PushbackReader ব্যবহার করে example.txt ফাইল থেকে character পড়া হচ্ছে।
  • যদি কোনো নির্দিষ্ট অক্ষর বা শব্দ পড়া হয়, তবে unread() মেথড ব্যবহার করে সেই অক্ষর বা শব্দ পুনরায় স্ট্রীমে পাঠানো হয়।

PushbackInputStream এবং PushbackReader এর সুবিধা:

  1. Random Access to Data:
    • PushbackInputStream এবং PushbackReader আপনাকে ইনপুট স্ট্রীম বা রিডারের মধ্যে random access সুবিধা দেয়, যাতে আপনি পড়া ডেটাকে পুনরায় স্ট্রীমে পাঠাতে পারেন।
  2. Tokenization:
    • এই ক্লাসগুলো সাধারণত lexical analysis বা tokenization-এ ব্যবহৃত হয়, যেখানে কিছু নির্দিষ্ট অংশ পুনরায় পড়া প্রয়োজন।
  3. Improved Data Handling:
    • ডেটা পড়ার সময় ভুল অংশগুলো পুনরায় স্ট্রীমে পাঠানোর সুবিধা data handling সহজ করে।
  4. Efficient Character and Byte Handling:
    • PushbackReader এবং PushbackInputStream ক্লাসগুলি character এবং byte স্ট্রীম উভয়ের জন্য কাজ করে, এবং বাফারিং সুবিধা প্রদান করে, যা performance উন্নত করে।

PushbackInputStream এবং PushbackReader এর সীমাবদ্ধতা:

  1. Limited Pushback Size:
    • PushbackInputStream এবং PushbackReader এ নির্দিষ্ট পরিমাণ ডেটা পুশব্যাক করা যায়। যদি আপনি অতিরিক্ত ডেটা পুশব্যাক করতে চান, তবে আপনাকে বড় বাফার ব্যবহার করতে হবে।
  2. Memory Consumption:
    • বাফারিংয়ের কারণে কিছু পরিমাণ memory খরচ হতে পারে, বিশেষ করে যখন বড় ফাইল বা ডেটা সেট হ্যান্ডল করতে হয়।
  3. Complexity:
    • Pushback স্ট্রীম ব্যবহারে কিছুটা complexity থাকতে পারে, বিশেষত যখন এটি tokenization বা ডেটা বিশ্লেষণমূলক কাজের জন্য ব্যবহার করা হয়।

  • PushbackInputStream এবং PushbackReader Java I/O প্যাকেজের অত্যন্ত কার্যকরী ক্লাস যা ডেটা পড়ার সময় pushback করতে সহায়ক, অর্থাৎ re-read বা move-back করার ক্ষমতা প্রদান করে।
  • PushbackInputStream বাইট স্ট্রীমের জন্য এবং PushbackReader চরিত্র স্ট্রীমের জন্য ব্যবহৃত হয়।
  • এই ক্লাসগুলি সাধারণত tokenization এবং lexical analysis এর জন্য ব্যবহৃত হয়, যেখানে ডেটার নির্দিষ্ট অংশে পুনরায় অ্যাক্সেসের প্রয়োজন হয়।
Content added By

Pushback Streams Java I/O প্যাকেজের একটি বিশেষ বৈশিষ্ট্য, যা স্ট্রীমে ডেটা পড়ার সময় নির্দিষ্ট বাইট বা ক্যারেক্টার পুনরায় "pushback" (ফিরিয়ে দেওয়া) করার ক্ষমতা প্রদান করে। এটি মূলত character stream বা byte stream-এ ডেটা পুনঃপাঠ বা ফেরত দেওয়ার জন্য ব্যবহৃত হয়, যাতে পূর্ববর্তী ডেটা পুনরায় প্রসেস করা যেতে পারে।

PushbackReader এবং PushbackInputStream হল Java I/O প্যাকেজের দুটি ক্লাস, যেগুলি pushback mechanism সমর্থন করে এবং stream processing এর জন্য অত্যন্ত কার্যকরী।


PushbackReader এবং PushbackInputStream এর ধারণা:

  1. PushbackInputStream:
    • এটি byte stream এর একটি ক্লাস এবং InputStream থেকে ইনপুট নেওয়ার জন্য ব্যবহৃত হয়। এটি এমনভাবে কাজ করে যে, আপনি একটি বাইট পড়ার পর, সেটি unread() মেথডের মাধ্যমে পুনরায় ফেলে দিতে পারেন, অর্থাৎ pushback করতে পারেন। ফলে, এটি স্ট্রীমে ফেরত দেওয়া ডেটা পরে আবার পড়তে সক্ষম হবে।
  2. PushbackReader:
    • এটি character stream এর একটি ক্লাস যা Reader থেকে ইনপুট পড়ে এবং নির্দিষ্ট চরিত্রগুলি pushback করতে সক্ষম। এটি pushback ফিচার সাপোর্ট করে, যেখানে আপনি পড়া ডেটাকে ফেরত (push back) পাঠাতে পারেন।

PushbackInputStream ক্লাস:

PushbackInputStream ক্লাসটি InputStream এর একটি সাবক্লাস যা আপনাকে পড়া byte data পুনরায় ফিরিয়ে দেওয়ার (pushback) সুবিধা দেয়। এটি unread() মেথড দ্বারা পূর্ববর্তী byte গুলি ফেরত পাঠাতে পারে।

PushbackInputStream উদাহরণ:

import java.io.*;

public class PushbackInputStreamExample {
    public static void main(String[] args) {
        String data = "Hello World!";
        
        try (PushbackInputStream pushbackInputStream = new PushbackInputStream(new ByteArrayInputStream(data.getBytes()))) {
            int byteData;
            
            // প্রথম বাইট পড়া
            byteData = pushbackInputStream.read();
            System.out.print((char) byteData); // Output: H

            // unread() মেথড ব্যবহার করে প্রথম বাইটটি পুনরায় পাঠানো
            pushbackInputStream.unread(byteData);
            
            // ফেরত পাঠানো বাইটটি পুনরায় পড়া
            byteData = pushbackInputStream.read();
            System.out.print((char) byteData); // Output: H

            // পরবর্তী বাইটগুলি পড়া
            while ((byteData = pushbackInputStream.read()) != -1) {
                System.out.print((char) byteData); // Output: ello World!
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

ব্যাখ্যা:

  • PushbackInputStream স্ট্রীম থেকে প্রথম বাইটটি পড়ার পর unread(byteData) মেথড দ্বারা সেই বাইটটি ফেরত পাঠানো হয়েছে। এর পর আবার একই বাইট পড়া হয়।
  • এতে pushback mechanism ব্যবহার করে পড়া ডেটাকে re-read করা হয়েছে।

আউটপুট:

Hello World!

PushbackReader ক্লাস:

PushbackReader ক্লাসটি Reader এর একটি সাবক্লাস যা character stream এর মাধ্যমে ইনপুট পড়ে এবং নির্দিষ্ট চরিত্রগুলি pushback করতে সক্ষম। এটি unread() মেথড দ্বারা একটি ক্যারেক্টার বা ক্যারেক্টারের অ্যারে পুনরায় স্ট্রীমে ফিরিয়ে দিতে পারে।

PushbackReader উদাহরণ:

import java.io.*;

public class PushbackReaderExample {
    public static void main(String[] args) {
        String data = "Hello Java!";
        
        try (PushbackReader pushbackReader = new PushbackReader(new StringReader(data), 10)) {
            int charData;
            
            // প্রথম ক্যারেক্টার পড়া
            charData = pushbackReader.read();
            System.out.print((char) charData); // Output: H

            // unread() মেথড ব্যবহার করে প্রথম ক্যারেক্টারটি পুনরায় পাঠানো
            pushbackReader.unread(charData);

            // ফেরত পাঠানো ক্যারেক্টারটি পুনরায় পড়া
            charData = pushbackReader.read();
            System.out.print((char) charData); // Output: H

            // পরবর্তী ক্যারেক্টারগুলি পড়া
            while ((charData = pushbackReader.read()) != -1) {
                System.out.print((char) charData); // Output: ello Java!
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

ব্যাখ্যা:

  • PushbackReader স্ট্রীম থেকে প্রথম ক্যারেক্টারটি পড়ার পর unread() মেথড দ্বারা সেই ক্যারেক্টারটি ফেরত পাঠানো হয়েছে।
  • এটি pushback ফিচারের মাধ্যমে character-based ডেটা ফেরত পাঠাতে এবং পুনরায় পড়তে সক্ষম।

আউটপুট:

Hello Java!

Pushback Streams এর সুবিধা:

  1. Retrieving Data:
    • Pushback Streams আপনাকে স্ট্রীম থেকে পড়া ডেটাকে ফেরত পাঠানোর (pushback) সুযোগ দেয়, যা অনেক সময় ডেটা প্রক্রিয়াকরণের জন্য প্রয়োজনীয় হতে পারে, যেমন ভুল ডেটা পড়ে ফেললে সেটি পুনরায় পড়া।
  2. Efficient Data Processing:
    • Pushback Streams ব্যবহার করে আপনি দ্রুত এবং কার্যকরভাবে ডেটা প্রক্রিয়াকরণ করতে পারেন, কারণ আপনাকে ডেটার অংশগুলি পুনরায় প্রক্রিয়া করতে হতে পারে, যেমন lexer বা parser এ ব্যবহার করা হয়।
  3. Control over Stream:
    • এটি স্ট্রীমে manual control প্রদান করে, যেমন ডেটা পুনরায় পাঠানো এবং পড়া, যা অন্যান্য সাধারণ InputStream বা Reader ক্লাসে সম্ভব নয়।
  4. Text-based and Binary Streams:
    • PushbackReader এবং PushbackInputStream উভয়ই character streams এবং byte streams-এর জন্য কাজ করতে পারে, তাই এটি টেক্সট এবং বাইনারি উভয় ধরনের ডেটা অ্যাক্সেস এবং প্রক্রিয়া করার জন্য উপযুক্ত।

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

  1. Memory Consumption:
    • Pushback Streams স্ট্রীমের ডেটা কিছু সময়ের জন্য memory তে ধরে রাখে, যা বড় ডেটা ফাইল বা সিস্টেমে অতিরিক্ত মেমরি ব্যবহারের সমস্যা সৃষ্টি করতে পারে।
  2. Complexity:
    • Pushback মেথড ব্যবহারের জন্য কিছু অতিরিক্ত জটিলতা থাকতে পারে, কারণ unread() মেথড দ্বারা আপনি শুধুমাত্র সীমিত সংখ্যক বাইট বা ক্যারেক্টার ফেরত পাঠাতে পারবেন।

  • Pushback Streams হল Java I/O প্যাকেজের একটি শক্তিশালী বৈশিষ্ট্য যা ডেটা ফেরত পাঠানো (pushback) করার ক্ষমতা প্রদান করে।
  • PushbackInputStream এবং PushbackReader ক্লাসগুলি আপনাকে byte এবং character streams-এ ডেটা পড়ার পরে তা পুনরায় স্ট্রীমে ফেরত পাঠানোর ক্ষমতা দেয়।
  • এটি data parsing বা lexical analysis এর মতো অ্যাপ্লিকেশনগুলিতে খুবই কার্যকরী, যেখানে stream data একাধিকবার প্রসেস করা প্রয়োজন।

Pushback Streams ব্যবহার করে আপনি স্ট্রীম ডেটাকে manual control দিয়ে প্রক্রিয়া করতে পারেন, এবং এটি performance এবং data manipulation জন্য একটি মূল্যবান টুল।

Content added By

PushbackInputStream এবং PushbackReader ক্লাসগুলি Java I/O প্যাকেজের একটি অংশ, যা ডেটা পুনঃব্যবহারের জন্য ব্যবহৃত হয়। এগুলি মূলত তখন ব্যবহার করা হয় যখন আপনাকে ডেটার উপর কিছু প্রক্রিয়া চালানোর পর, সেই ডেটা পুনরায় স্ট্রিমে ফেলে দিতে হয়।

এগুলি pushback কৌশল ব্যবহার করে, যেখানে একটি বাইট বা চরিত্র ফেরত পাঠানো (পুশব্যাক) হয় এবং পুনরায় পড়া হতে পারে। যখন আপনি একটি PushbackInputStream বা PushbackReader ব্যবহার করেন, আপনি একটি নির্দিষ্ট আংশিক ডেটাকে "পুশব্যাক" করতে পারেন, অর্থাৎ আপনি কিছু ডেটা পড়ার পরে সেই ডেটা আবার স্ট্রিমে রাখতে পারেন, যাতে সেটি আবার প্রক্রিয়া করা যায়।


PushbackInputStream এবং PushbackReader এর ধারণা:

  1. PushbackInputStream:
    • এটি InputStream এর একটি সাবক্লাস যা বাইনারি ডেটার জন্য ব্যবহৃত হয়। আপনি unread() মেথড ব্যবহার করে একটি বা একাধিক বাইট push back করতে পারেন, যাতে পরে এই বাইটগুলি আবার পড়া যায়।
  2. PushbackReader:
    • এটি Reader এর একটি সাবক্লাস যা Character Streams জন্য ব্যবহৃত হয়। এটি unread() মেথড সরবরাহ করে, যার মাধ্যমে আপনি একটি বা একাধিক চরিত্র push back করতে পারেন।

PushbackInputStream এর ব্যবহার (Byte Streams)

PushbackInputStream ব্যবহার করে, আপনি বাইনারি ডেটা পুনরায় পড়তে পারেন। এটি বিশেষত ব্যবহারী বা নেটওয়ার্ক প্রোটোকলগুলির জন্য উপযোগী, যেখানে আপনি ডেটার উপর পুনরায় প্রক্রিয়া চালাতে চান।

PushbackInputStream উদাহরণ:

import java.io.*;

public class PushbackInputStreamExample {
    public static void main(String[] args) {
        String inputData = "Hello, world!";
        byte[] inputBytes = inputData.getBytes();

        try (PushbackInputStream pushbackInputStream = new PushbackInputStream(new ByteArrayInputStream(inputBytes))) {
            int byteData = pushbackInputStream.read();
            System.out.println((char) byteData);  // প্রথম বাইট পড়া হবে (H)

            // পুশব্যাক করা হচ্ছে প্রথম বাইট (H)
            pushbackInputStream.unread(byteData);

            // পুনরায় পড়া হবে সেই বাইট (H)
            byteData = pushbackInputStream.read();
            System.out.println((char) byteData);  // পুনরায় H পড়া হবে
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

ব্যাখ্যা:

  • প্রথমে PushbackInputStream দিয়ে একটি বাইট পড়া হয় এবং তারপর সেই বাইট unread() মেথডের মাধ্যমে স্ট্রীমে পুনরায় পাঠানো হয়।
  • এটি byte-by-byte ইনপুট পরিচালনার জন্য উপকারী, যেখানে আপনি একটি বাইট বা ডেটার অংশ পুনরায় ইনপুট স্ট্রীমে রাখতে চান।

আউটপুট:

H
H

PushbackReader এর ব্যবহার (Character Streams)

PushbackReader মূলত Character Streams এর জন্য ব্যবহৃত হয়, যেখানে আপনি টেক্সট ডেটা পুনরায় পড়তে পারবেন।

PushbackReader উদাহরণ:

import java.io.*;

public class PushbackReaderExample {
    public static void main(String[] args) {
        String inputData = "Hello, world!";
        try (PushbackReader pushbackReader = new PushbackReader(new StringReader(inputData))) {
            int charData = pushbackReader.read();
            System.out.println((char) charData);  // প্রথম ক্যারেক্টার পড়া হবে (H)

            // পুশব্যাক করা হচ্ছে প্রথম ক্যারেক্টার (H)
            pushbackReader.unread(charData);

            // পুনরায় পড়া হবে সেই ক্যারেক্টার (H)
            charData = pushbackReader.read();
            System.out.println((char) charData);  // পুনরায় H পড়া হবে
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

ব্যাখ্যা:

  • PushbackReader ব্যবহার করে প্রথমে একটি চরিত্র পড়া হচ্ছে (H), তারপর সেটি unread() মেথডের মাধ্যমে পুনরায় স্ট্রিমে পুশব্যাক করা হচ্ছে।
  • read() মেথডের মাধ্যমে পুনরায় সেই চরিত্র পড়া হচ্ছে।

আউটপুট:

H
H

PushbackInputStream এবং PushbackReader এর সুবিধা:

  1. Data Reusability:
    • PushbackInputStream এবং PushbackReader আপনাকে ইনপুট ডেটা পুনরায় ব্যবহার করতে দেয়, যাতে আপনি প্রক্রিয়াকরণের সময় কোনো ভুল বুঝে ফেললে, সেগুলি আবার পরীক্ষা করতে পারেন।
  2. Efficient for Protocol Parsing:
    • বিভিন্ন প্রোটোকল বা parsing এর ক্ষেত্রে, যেখানে ডেটার কিছু অংশ আগেই পড়ে, এবং পরে সেটি আবার পড়তে হয়, এই ক্লাসগুলি কার্যকর।
  3. Pushback Mechanism:
    • Pushback মেথডের মাধ্যমে আপনি একটি বা একাধিক বাইট বা ক্যারেক্টার পুনরায় স্ট্রিমে রাখতে পারেন, যা বিশেষত token parsing এর জন্য দরকারী।

PushbackInputStream এবং PushbackReader এর সীমাবদ্ধতা:

  1. Memory Overhead:
    • PushbackInputStream এবং PushbackReader ক্লাসগুলো buffering প্রযুক্তি ব্যবহার করে, যার কারণে কিছু অতিরিক্ত মেমরি ব্যবহৃত হতে পারে, বিশেষত যদি বড় ডেটা সেট ব্যবহৃত হয়।
  2. Limited Pushback Capacity:
    • PushbackInputStream এবং PushbackReader সাধারণত একটি ছোট বাফার ব্যবহার করে (একটি বাইট বা একটি চরিত্র), সুতরাং অনেক বড় আকারের ডেটা pushback করা সম্ভব নয়।
  3. Not Suitable for All Scenarios:
    • এগুলি শুধুমাত্র stream parsing এর জন্য উপযুক্ত, এবং সাধারণ text processing বা binary I/O জন্য ব্যবহৃত হয় না।

  • PushbackInputStream এবং PushbackReader ক্লাসগুলি Java I/O-তে শক্তিশালী টুলস যা ডেটা পুনঃব্যবহার (pushback) করার জন্য ব্যবহৃত হয়।
  • এগুলি মূলত protocol parsing এবং token processing এর জন্য উপকারী যেখানে একটি অংশ ডেটা প্রক্রিয়া করার পরে তা পুনরায় পড়তে হয়।
  • PushbackInputStream বাইনারি ডেটার জন্য এবং PushbackReader টেক্সট ডেটার জন্য ব্যবহৃত হয়।

এই ক্লাসগুলির মাধ্যমে byte-by-byte বা character-by-character ডেটা প্রক্রিয়া করার সময়, আপনি ডেটা pushback করে পুনরায় ব্যবহার করতে পারবেন, যা অনেক প্রোগ্রামিং পরিস্থিতিতে অত্যন্ত কার্যকর।

Content added By

Pushback Streams Java I/O প্যাকেজের একটি শক্তিশালী বৈশিষ্ট্য, যা আপনাকে InputStream বা Reader থেকে পড়া ডেটা পুনরায় স্ট্রীমে ফেরত পাঠাতে (push back) সহায়ক। এটি সাধারণত PushbackInputStream এবং PushbackReader ক্লাস ব্যবহার করে করা হয়, যা Byte Stream এবং Character Stream এর জন্য পৃথকভাবে কাজ করে।

Pushback Streams এর ধারণা:

  1. PushbackInputStream:
    • এটি byte stream এর জন্য ব্যবহৃত হয়। আপনি unread(byte[] b) মেথড ব্যবহার করে ডেটার কিছু অংশ push back করতে পারেন।
  2. PushbackReader:
    • এটি character stream এর জন্য ব্যবহৃত হয়। আপনি unread(int c) মেথড ব্যবহার করে একটি বা একাধিক চরিত্র push back করতে পারেন।

Pushback Streams এর ব্যবহারের কেস:

  • Tokenization: যখন আপনি একটি স্ট্রীম বা রিডার থেকে ডেটা পচ্ছন্দে পড়ছেন এবং কোন কিছু ভুলভাবে পড়ে গেলে বা অতিরিক্ত কিছু পড়ে গেলে সেটি পুনরায় স্ট্রীমে পাঠানো হতে পারে।
  • Lexical analysis: যেখানে আপনি সোর্স কোড বা ডেটার অংশগুলো টোকেন হিসাবে ভাগ করে এবং মাঝে মাঝে কিছু অংশ ফেরত পাঠাতে হয়।

PushbackInputStream এর উদাহরণ:

PushbackInputStream ব্যবহার করে বাইনারি ডেটা পড়ার সময় একটি বা একাধিক বাইট পুনরায় পাঠানো যেতে পারে।

PushbackInputStream উদাহরণ:

import java.io.*;

public class PushbackInputStreamExample {
    public static void main(String[] args) {
        String input = "This is a test. Testing pushback.";
        byte[] inputBytes = input.getBytes();

        try (PushbackInputStream pushbackInputStream = new PushbackInputStream(new ByteArrayInputStream(inputBytes))) {
            int byteData;
            while ((byteData = pushbackInputStream.read()) != -1) {
                char currentChar = (char) byteData;
                System.out.print(currentChar);

                // যদি 't' পাওয়া যায়, তবে সেটি পুশব্যাক করা হবে
                if (currentChar == 't') {
                    System.out.println("\nPushback the 't'");
                    pushbackInputStream.unread(byteData);  // Pushback the 't'
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

ব্যাখ্যা:

  • এখানে PushbackInputStream ব্যবহার করে একটি বাইট স্ট্রীম তৈরি করা হয়েছে, এবং read() মেথড দিয়ে ডেটা পড়া হচ্ছে।
  • যখন 't' পাওয়া যায়, তখন সেটি unread() মেথডের মাধ্যমে পুনরায় পাঠানো হচ্ছে, যাতে সেটি আবার পড়া যায়।

আউটপুট:

This is a test. Testing pushback.
Pushback the 't'
Testing pushback.

PushbackReader এর উদাহরণ:

PushbackReader ক্লাসটি character stream এর জন্য ব্যবহৃত হয় এবং এটি unread() মেথড দিয়ে একটি বা একাধিক চরিত্র পুনরায় স্ট্রীমে পাঠাতে সাহায্য করে।

PushbackReader উদাহরণ:

import java.io.*;

public class PushbackReaderExample {
    public static void main(String[] args) {
        String input = "Hello, world! Testing pushback reader.";
        
        try (PushbackReader pushbackReader = new PushbackReader(new StringReader(input))) {
            int character;
            while ((character = pushbackReader.read()) != -1) {
                char currentChar = (char) character;
                System.out.print(currentChar);

                // যদি 'T' পাওয়া যায়, তবে সেটি পুনরায় পাঠানো হবে
                if (currentChar == 'T') {
                    System.out.println("\nPushback the 'T'");
                    pushbackReader.unread('T');  // Pushback the 'T'
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

ব্যাখ্যা:

  • PushbackReader দিয়ে StringReader থেকে ডেটা পড়া হচ্ছে।
  • unread() মেথডের মাধ্যমে একটি চরিত্র (যেমন 'T') পুনরায় পাঠানো হচ্ছে যদি এটি নির্দিষ্ট শর্তে পড়ে।

আউটপুট:

Hello, world! Testing pushback reader.
Pushback the 'T'
Testing pushback reader.

PushbackInputStream এবং PushbackReader এর সুবিধা:

  1. Data Reusability:
    • Pushback Streams আপনাকে ডেটাকে পুনরায় ব্যবহার করতে দেয়। আপনি কিছু ডেটা পড়ার পর সেটিকে ফেরত পাঠাতে পারেন এবং পরে সেটি আবার পড়তে পারেন।
  2. Tokenization and Lexical Analysis:
    • এগুলি সাধারণত tokenization বা lexical analysis-এ ব্যবহৃত হয়, যেখানে ডেটার কোনো অংশ ভুলভাবে পড়ে গেলে সেটি ফেরত পাঠানো হয়।
  3. Efficient Error Handling:
    • ভুলভাবে পড়া ডেটা বা অপ্রয়োজনীয় অংশগুলো পুনরায় পাঠানো যায়, যা error handling এবং data correction এর জন্য কার্যকরী।
  4. Memory Efficiency:
    • ডেটা পুনরায় পাঠানোর সুবিধা দিয়ে বড় ডেটা সেটগুলো আরও কার্যকরভাবে পরিচালনা করা যায়।

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

  1. Limited Pushback Size:
    • PushbackInputStream এবং PushbackReader একবারে শুধুমাত্র একটি বাইট বা একটি চরিত্র পুনরায় পাঠাতে পারে, এবং এগুলোর জন্য একটি ছোট বাফার ব্যবহার করা হয়।
  2. Memory Overhead:
    • Pushback প্রযুক্তি ব্যবহার করে কিছু পরিমাণ memory খরচ হতে পারে, বিশেষত যদি অনেক বেশি ডেটা স্ট্রীম করা হয়।
  3. Complexity:
    • Pushback স্ট্রীম ব্যবহারে কিছুটা complexity থাকতে পারে, বিশেষত যখন এটি tokenization বা ডেটা বিশ্লেষণমূলক কাজের জন্য ব্যবহার করা হয়।

  • PushbackInputStream এবং PushbackReader Java I/O প্যাকেজের শক্তিশালী ক্লাস যা ইনপুট ডেটা pushback বা re-read করার ক্ষমতা প্রদান করে।
  • এগুলি tokenization এবং lexical analysis এর জন্য ব্যবহৃত হয়, যেখানে stream parsing এর সময় কোন ভুল পড়ে গেলে সেই অংশটি পুনরায় পড়া যায়।
  • PushbackInputStream বাইনারি ডেটার জন্য এবং PushbackReader চরিত্র স্ট্রীমের জন্য ব্যবহৃত হয়।

এটি বিশেষভাবে protocol parsing, data stream processing, এবং text-based parsing কাজের জন্য অত্যন্ত কার্যকরী।

Content added By
Promotion

Are you sure to start over?

Loading...