Java NIO কি এবং কেন প্রয়োজন?

Java NIO (New I/O) - জাভা আইও (Java.io Package) - Java Technologies

310

Java NIO (New Input/Output) হল Java 1.4-এ অন্তর্ভুক্ত একটি শক্তিশালী I/O API যা traditional I/O (Blocking I/O) এর তুলনায় অনেক বেশি দ্রুত এবং কার্যকরী। NIO non-blocking I/O সাপোর্ট করে, যা বড় ডেটা সেট, প্যারালাল I/O, এবং high-performance network programming এর জন্য খুবই উপযোগী। এটি file-based I/O, network-based I/O এবং memory-mapped I/O কাজ করার জন্য একটি উন্নত API প্রদান করে।

Java NIO এর মূল বৈশিষ্ট্য:

  1. Non-blocking I/O (Asynchronous I/O):
    • Non-blocking মডেলটি ব্যবহারকারীদের একই থ্রেডে একাধিক I/O অপারেশন করতে দেয়, অর্থাৎ এক অপারেশন চলতে থাকা অবস্থায় অন্য অপারেশনগুলি ব্লক হয় না। এটি high-concurrency পরিবেশে কার্যকরী।
  2. Buffers:
    • NIO buffering ধারণাটি ব্যবহার করে, যেখানে byte buffer বা char buffer ব্যবহার করে ডেটা স্টোর করা হয়। এটি I/O অপারেশনগুলির জন্য আরও কার্যকরী এবং দ্রুত।
  3. Channels:
    • Channels হল streams এর মতো, তবে এগুলি read এবং write করতে ব্যবহৃত হয় এবং buffers এর সাথে কাজ করে। এটি একধরনের bi-directional I/O পদ্ধতি।
  4. Selectors:
    • Selectors একটি বা একাধিক channels এর মধ্যে non-blocking I/O অপারেশন পরিচালনা করতে সহায়ক। এটি একটি multiplexing প্রযুক্তি, যেখানে একাধিক I/O অপারেশন একই থ্রেডে পরিচালিত হতে পারে।
  5. Memory-Mapped Files:
    • NIO এর মাধ্যমে আপনি memory-mapped files তৈরি করতে পারেন, যা বড় ফাইলের সাথে কার্যকরীভাবে কাজ করতে সহায়ক এবং direct memory access প্রদান করে। এটি high-performance file I/O এর জন্য উপযুক্ত।

Java NIO এবং Traditional I/O এর মধ্যে পার্থক্য:

বিষয়Traditional I/O (Blocking I/O)NIO (New I/O)
Blocking vs Non-blockingBlocking - I/O অপারেশন চলাকালীন থ্রেড ব্লক হয়ে থাকে।Non-blocking - একাধিক অপারেশন একসাথে চলতে পারে।
Data Handlingস্ট্রীম ভিত্তিক ডেটা।Buffer ভিত্তিক ডেটা, যেখানে buffer ব্যবহৃত হয়।
Concurrencyএক থ্রেড একটি I/O অপারেশন করতে পারে।একাধিক থ্রেডে একাধিক I/O অপারেশন একসাথে চলতে পারে।
Performanceবড় ডেটা এবং নেটওয়ার্ক I/O-তে ধীর গতি।উচ্চ কার্যকারিতা, দ্রুত ডেটা প্রসেসিং।
Selector SupportNo selector support (one thread per connection)Selectors দিয়ে একাধিক channels-এ non-blocking I/O সাপোর্ট।

Java NIO এর উপকারিতা:

  1. Non-blocking I/O:
    • Java NIO non-blocking I/O সাপোর্ট করে, যার মাধ্যমে একই থ্রেডে একাধিক I/O অপারেশন পরিচালনা করা যায়, যা high concurrency প্রয়োজনীয় অ্যাপ্লিকেশনগুলির জন্য উপযুক্ত।
  2. Buffering:
    • Buffering ব্যবহার করে Java NIO একাধিক ডেটা একযোগে এবং দ্রুত পরিচালনা করতে সক্ষম। এটি I/O performance বৃদ্ধি করতে সাহায্য করে।
  3. Efficient File Handling:
    • Java NIO memory-mapped file এবং direct I/O ব্যবহারের মাধ্যমে বৃহৎ ফাইলগুলির সাথে দ্রুত কাজ করতে সক্ষম।
  4. Selectors and Multiplexing:
    • Selectors প্রযুক্তি ব্যবহার করে একটি থ্রেড একাধিক channels পরিচালনা করতে পারে, যা network programming এর জন্য খুবই উপকারী। একে event-driven programming বলা হয়।
  5. Improved Performance:
    • Java NIO বিভিন্ন I/O অপারেশন একত্রিত করে high-performance data processing প্রদান করে, যা traditional I/O এর তুলনায় অনেক দ্রুত।

Java NIO এর প্রধান উপাদানসমূহ:

  1. Buffers:
    • NIO তে Buffers (যেমন ByteBuffer, CharBuffer, IntBuffer, ইত্যাদি) ব্যবহার করে ডেটা স্টোর এবং প্রসেস করা হয়। Buffers ডেটা ধারণ করার জন্য একটি ধারাবাহিক মেমরি অঞ্চল হিসেবে কাজ করে।
  2. Channels:
    • Channel হল I/O স্ট্রীমের মতো, তবে এটি buffer এর সাথে কাজ করে। এটি read এবং write করার জন্য ব্যবহার হয়।
    • উদাহরণ: FileChannel, SocketChannel, DatagramChannel, ServerSocketChannel
  3. Selectors:
    • Selector একটি multiplexer যা একাধিক channels এর উপর non-blocking I/O অপারেশন পরিচালনা করতে সক্ষম। এটি একাধিক socket connections বা file channels পরিচালনা করতে ব্যবহৃত হয়।
  4. Charsets:
    • Java NIO এর মাধ্যমে Character Encoding এবং Decoding কাজ করার জন্য Charset এবং CharsetDecoder / CharsetEncoder ক্লাস ব্যবহার করা হয়।

Java NIO উদাহরণ:

1. File Reading and Writing with NIO:

import java.io.*;
import java.nio.*;
import java.nio.channels.*;
import java.nio.file.*;

public class NIOFileExample {
    public static void main(String[] args) throws IOException {
        // File Reading with NIO
        Path path = Paths.get("input.txt");
        byte[] fileBytes = Files.readAllBytes(path);
        System.out.println(new String(fileBytes));

        // File Writing with NIO
        Path outputPath = Paths.get("output.txt");
        String content = "This is a test written using Java NIO.";
        Files.write(outputPath, content.getBytes());

        System.out.println("File written successfully using NIO.");
    }
}

ব্যাখ্যা:

  • Files.readAllBytes() এবং Files.write() মেথডের মাধ্যমে NIO এর সাথে ফাইল পড়া এবং লেখা হচ্ছে।
  • এখানে Path এবং Files ক্লাস ব্যবহার করা হয়েছে।

2. Non-Blocking I/O with NIO:

import java.io.IOException;
import java.nio.channels.*;
import java.nio.*;
import java.net.*;

public class NIOClientServer {
    public static void main(String[] args) throws IOException {
        // Creating a server socket channel
        ServerSocketChannel serverSocketChannel = ServerSocketChannel.open();
        serverSocketChannel.bind(new InetSocketAddress(5000));
        serverSocketChannel.configureBlocking(false);  // non-blocking mode

        // Creating a selector for multiplexing
        Selector selector = Selector.open();
        serverSocketChannel.register(selector, SelectionKey.OP_ACCEPT);

        while (true) {
            selector.select();  // wait for events

            for (SelectionKey key : selector.selectedKeys()) {
                if (key.isAcceptable()) {
                    SocketChannel client = serverSocketChannel.accept();
                    System.out.println("Client connected: " + client.getRemoteAddress());
                    client.configureBlocking(false);
                    client.register(selector, SelectionKey.OP_READ);
                }
                if (key.isReadable()) {
                    SocketChannel client = (SocketChannel) key.channel();
                    ByteBuffer buffer = ByteBuffer.allocate(256);
                    int bytesRead = client.read(buffer);
                    if (bytesRead == -1) {
                        client.close();
                    } else {
                        System.out.println("Received message: " + new String(buffer.array()));
                    }
                }
            }
            selector.selectedKeys().clear();
        }
    }
}

ব্যাখ্যা:

  • ServerSocketChannel এবং SocketChannel ব্যবহার করে একটি non-blocking server তৈরি করা হয়েছে।
  • Selector ব্যবহার করে multiplexing করা হয়েছে যাতে একাধিক client connections একসাথে পরিচালনা করা যায়।

  • Java NIO হল একটি শক্তিশালী I/O API যা non-blocking I/O, buffers, channels, এবং selectors ব্যবহার করে high-performance I/O অপারেশন করতে সহায়ক।
  • এটি file handling, network communication, এবং high-concurrency systems-এ ব্যবহৃত হয়।
  • traditional I/O এর তুলনায় Java NIO অনেক দ্রুত এবং কার্যকরী, বিশেষ করে বৃহৎ ডেটা সেট এবং প্যারালাল অপারেশনগুলির জন্য।

Java NIO ব্যবহার করে আপনি file I/O, socket communication, এবং asynchronous processing খুব সহজে এবং দক্ষভাবে করতে পারবেন।

Content added By
Promotion

Are you sure to start over?

Loading...