Java NIO (New I/O) একটি শক্তিশালী ইনপুট/আউটপুট লাইব্রেরি যা Channel এবং Buffer এর মাধ্যমে ডেটা প্রবাহিত করার জন্য ডিজাইন করা হয়েছে। Channel গুলি হল I/O অপারেশন পরিচালনার জন্য ব্যবহৃত অবজেক্ট, যা ডেটা পাঠানো (write) বা গ্রহণ (read) করতে সহায়ক। transferFrom এবং transferTo হল দুটি অত্যন্ত কার্যকরী মেথড যা Java NIO-তে Channel এর মধ্যে ডেটা দ্রুত এবং সহজভাবে স্থানান্তরিত করতে ব্যবহৃত হয়।
এখানে, আমরা transferFrom এবং transferTo মেথডের ধারণা এবং ব্যবহারের বিস্তারিত আলোচনা করব।
transferFrom এবং transferTo মেথড
১. transferFrom মেথড
transferFrom মেথডটি একটি ReadableByteChannel থেকে একটি WritableByteChannel-এ ডেটা ট্রান্সফার করার জন্য ব্যবহৃত হয়। এটি বিশেষভাবে FileChannel এর মধ্যে ডেটা স্থানান্তরের জন্য ব্যবহৃত হয়, কিন্তু এটি অন্যান্য ধরনের চ্যানেলের মধ্যে ডেটা স্থানান্তরের জন্যও ব্যবহার করা যেতে পারে।
transferFrom এর সিগনেচার:
long transferFrom(ReadableByteChannel src, long position, long count) throws IOException;
- src: এটি এমন একটি চ্যানেল যা থেকে ডেটা পাঠানো হবে (যেমন, একটি
FileChannelযা একটি ফাইল পড়বে)। - position: এটি ফাইলের বর্তমান অবস্থান, যেখানে থেকে ডেটা রিড করা হবে।
- count: এটি সেই সংখ্যক বাইট যা স্থানান্তরিত হবে।
২. transferTo মেথড
transferTo মেথডটি একটি ReadableByteChannel থেকে একটি WritableByteChannel-এ ডেটা স্থানান্তরের জন্য ব্যবহৃত হয়, কিন্তু এটি ডেটা পাঠানোর জন্য ব্যবহার করা হয়।
transferTo এর সিগনেচার:
long transferTo(long position, long count, WritableByteChannel target) throws IOException;
- position: এটি সেই অবস্থান যেখানে থেকে ডেটা পাঠানো শুরু হবে।
- count: কতগুলো বাইট পাঠানো হবে।
- target: এটি একটি চ্যানেল যেখানে ডেটা লেখা হবে (যেমন, একটি
FileChannelযেখানে ফাইল লেখা হবে)।
transferFrom এবং transferTo এর ব্যবহারের উদাহরণ
এখানে একটি উদাহরণ দেওয়া হলো যেখানে transferFrom এবং transferTo মেথডের মাধ্যমে ফাইলের মধ্যে ডেটা স্থানান্তর করা হচ্ছে।
উদাহরণ: FileChannel ব্যবহার করে Data Transfer
import java.nio.*;
import java.nio.channels.*;
import java.io.*;
public class DataTransferExample {
public static void main(String[] args) {
try {
// Source FileChannel (যেখানে থেকে ডেটা পাঠানো হবে)
RandomAccessFile sourceFile = new RandomAccessFile("source.txt", "r");
FileChannel sourceChannel = sourceFile.getChannel();
// Destination FileChannel (যেখানে ডেটা লেখা হবে)
RandomAccessFile destinationFile = new RandomAccessFile("destination.txt", "rw");
FileChannel destinationChannel = destinationFile.getChannel();
// transferFrom - sourceChannel থেকে destinationChannel এ ডেটা পাঠানো
long transferred = destinationChannel.transferFrom(sourceChannel, 0, sourceChannel.size());
System.out.println("Transferred " + transferred + " bytes from source to destination.");
// transferTo - sourceChannel থেকে destinationChannel এ ডেটা পাঠানো
sourceChannel.position(0); // Position রিসেট করা
long transferredTo = sourceChannel.transferTo(0, sourceChannel.size(), destinationChannel);
System.out.println("Transferred " + transferredTo + " bytes from source to destination.");
// চ্যানেল বন্ধ করা
sourceChannel.close();
destinationChannel.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
ব্যাখ্যা:
- source.txt এবং destination.txt নামে দুটি ফাইল তৈরি করা হয়েছে।
- sourceChannel থেকে destinationChannel-এ ডেটা স্থানান্তর করতে transferFrom এবং transferTo মেথড ব্যবহার করা হয়েছে।
- transferFrom মেথড ব্যবহার করে ডেটা
sourceChannelথেকেdestinationChannel-এ পাঠানো হয়েছে। - পরে,
sourceChannelএর অবস্থান পুনরায় শূন্য করা হয়েছে এবং transferTo মেথড ব্যবহার করে একই ডেটা পুনরায় স্থানান্তরিত করা হয়েছে।
transferFrom এবং transferTo মেথডের সুবিধা
- দ্রুত ডেটা স্থানান্তর:
- transferFrom এবং transferTo মেথডগুলি NIO এর মাধ্যমে চ্যানেল থেকে চ্যানেলে ডেটা দ্রুত স্থানান্তর করতে সহায়ক। এগুলি ব্লকিং অপারেশন, কিন্তু একাধিক চ্যানেলকে দক্ষভাবে পরিচালনা করার জন্য সুবিধাজনক।
- কমপ্লেক্স I/O কমান্ড এড়ানো:
- এই মেথডগুলি আপনার জন্য অনেক কমপ্লেক্স I/O অপারেশন সরল করে দেয়, যেমন ডেটা কপি করা, যা সাধারণভাবে একাধিক বাফার এবং স্টেপে সম্পাদিত হয়।
- ফাইল কপি এবং সিঙ্ক্রোনাইজেশন:
- ফাইলের মধ্যে ডেটা কপি করার সময় transferFrom এবং transferTo মেথড খুবই কার্যকরী। এগুলি ফাইলের মধ্যে ডেটা স্থানান্তরিত করার জন্য একটি সরল পদ্ধতি প্রদান করে।
- কম রিসোর্স ব্যবহার:
- ডেটা স্থানান্তরের সময় মেমরি এবং CPU রিসোর্সের দক্ষ ব্যবহার নিশ্চিত করতে সাহায্য করে, কারণ এগুলি শুধুমাত্র ফাইলের অংশগুলির ওপর কাজ করে এবং একাধিক থ্রেডে ব্যবহার করা যায়।
transferFrom এবং transferTo হল Java NIO এর দুটি অত্যন্ত কার্যকরী মেথড, যা ডেটা চ্যানেল থেকে চ্যানেলে স্থানান্তর করতে ব্যবহৃত হয়। এগুলি দ্রুত I/O অপারেশন নিশ্চিত করে এবং সিস্টেমের রিসোর্স ব্যবহারে দক্ষতা বৃদ্ধি করে। এই মেথডগুলি ফাইল কপি এবং ডেটা স্থানান্তরের জন্য একটি সহজ এবং কার্যকর পদ্ধতি প্রদান করে, যা বড় ফাইল পরিচালনায় বিশেষভাবে কার্যকরী।
Read more