Java NIO (New Input/Output) একটি শক্তিশালী API যা বিভিন্ন I/O অপারেশনগুলোর জন্য আরও উন্নত এবং কার্যকরী পদ্ধতি প্রদান করে। এর মধ্যে Buffer একটি গুরুত্বপূর্ণ উপাদান, যা ডেটা স্থানান্তর এবং মেমরিতে ডেটা পরিচালনার জন্য ব্যবহৃত হয়। Java NIO Buffers মূলত তিনটি প্রধান প্রপার্টি দ্বারা নিয়ন্ত্রিত হয়: Position, Limit, এবং Capacity। এগুলো Buffer এর অবস্থা এবং এর মধ্যে ডেটা কিভাবে প্রবাহিত হয় তা নিয়ন্ত্রণ করে।
এই প্রপার্টিগুলোর ধারণা বুঝতে পারলে আপনি Java NIO তে ডেটা কিভাবে প্রক্রিয়া করবেন, তা আরও ভালোভাবে বুঝতে পারবেন।
Buffer এর মূল প্রপার্টি: Position, Limit, এবং Capacity
১. Position (পজিশন)
Position হলো সেই অবস্থান যেখানে পরবর্তী ডেটা পাঠানো বা পড়া হবে। যখন আপনি একটি Buffer তৈরি করেন, এটি প্রথমে position 0 এ থাকে। প্রতিবার ডেটা লেখার পর, position একেকটি স্থানান্তরিত হয়। এর মানে হলো, যখন আপনি একটি Buffer এ ডেটা লিখবেন বা পড়বেন, তখন ডেটা সেই position থেকে শুরু হবে, এবং পরে এটি এক এক করে পরিবর্তিত হবে।
- Position নির্ধারণ করে কোন স্থানে ডেটা লেখা বা পড়া হবে।
position()মেথডের মাধ্যমে আপনি এটি দেখতে বা সেট করতে পারেন।
ByteBuffer buffer = ByteBuffer.allocate(10);
System.out.println(buffer.position()); // Output: 0
buffer.put((byte) 1);
System.out.println(buffer.position()); // Output: 1
২. Limit (লিমিট)
Limit হলো সেই সীমা পর্যন্ত Buffer এর ডেটা ব্যবহারযোগ্য। অর্থাৎ, আপনি limit পর্যন্ত ডেটা পড়তে বা লিখতে পারবেন। যখন আপনি get() বা put() মেথড ব্যবহার করেন, তখন Buffer এর position এই limit এর চেয়ে বড় হতে পারবে না।
- Limit নির্ধারণ করে, আপনি কতটুকু ডেটা পড়তে বা লিখতে পারবেন।
limit()মেথডের মাধ্যমে আপনি এটি দেখতে বা সেট করতে পারেন।
ByteBuffer buffer = ByteBuffer.allocate(10);
System.out.println(buffer.limit()); // Output: 10
buffer.put((byte) 1);
buffer.put((byte) 2);
System.out.println(buffer.position()); // Output: 2
System.out.println(buffer.limit()); // Output: 10
৩. Capacity (ক্যাপাসিটি)
Capacity হলো Buffer এর সর্বোচ্চ সাইজ বা স্টোরেজ ক্ষমতা। এটি একটি নির্দিষ্ট মানে সীমাবদ্ধ, এবং এটি Buffer তৈরির সময় নির্ধারণ করা হয়। একবার Buffer এর capacity নির্ধারিত হলে, আপনি এটি পরিবর্তন করতে পারবেন না।
- Capacity Buffer এর সর্বোচ্চ স্টোরেজ ক্ষমতা নির্দেশ করে।
capacity()মেথডের মাধ্যমে আপনি এটি দেখতে পারেন।
ByteBuffer buffer = ByteBuffer.allocate(10);
System.out.println(buffer.capacity()); // Output: 10
Buffer Lifecycle এবং State
Buffer এর জীবনচক্র কয়েকটি ধাপে বিভক্ত:
Clear: এটি
positionকে 0 এ রিসেট করে এবংlimitকেcapacityএর সমান করে দেয়। এটি Buffer কে নতুনভাবে ব্যবহার করার জন্য প্রস্তুত করে।ByteBuffer buffer = ByteBuffer.allocate(10); buffer.put((byte) 1); buffer.clear(); System.out.println(buffer.position()); // Output: 0 System.out.println(buffer.limit()); // Output: 10Flip: এটি
positionকে 0 এ রিসেট করে এবংlimitকেpositionএর মানে সেট করে। এটি সাধারণত ব্যবহৃত হয় যখন আপনি Buffer এ ডেটা লিখে ফেলেছেন এবং এখন সেটি পড়তে চান।ByteBuffer buffer = ByteBuffer.allocate(10); buffer.put((byte) 1); buffer.flip(); // Prepares the buffer for reading System.out.println(buffer.position()); // Output: 0 System.out.println(buffer.limit()); // Output: 1Rewind: এটি
positionকে 0 এ রিসেট করে, তবেlimitঅপরিবর্তিত থাকে। এটি সাধারণত Buffer এর মধ্যে ডেটা পুনরায় পড়ার জন্য ব্যবহৃত হয়।ByteBuffer buffer = ByteBuffer.allocate(10); buffer.put((byte) 1); buffer.flip(); buffer.rewind(); // Prepares the buffer for reading from the beginning System.out.println(buffer.position()); // Output: 0
Summary of Key Methods
| Method | Description |
|---|---|
capacity() | Returns the capacity of the buffer (maximum storage space). |
limit() | Returns the limit of the buffer (up to which you can write/read). |
position() | Returns the current position (where to read/write next). |
clear() | Resets the buffer for reuse by setting position to 0 and limit to capacity. |
flip() | Prepares the buffer for reading by setting limit to position and position to 0. |
rewind() | Resets the position to 0 but leaves limit unchanged, useful for re-reading the buffer. |
Java NIO তে Buffer একটি অত্যন্ত গুরুত্বপূর্ণ উপাদান যা I/O অপারেশনগুলোর কার্যকারিতা বৃদ্ধি করে। Position, Limit, এবং Capacity এই তিনটি প্রপার্টি Buffer এর কর্মক্ষমতা এবং ডেটার প্রবাহ নিয়ন্ত্রণ করে। আপনি যখন NIO ব্যবহার করবেন, তখন এগুলোকে সঠিকভাবে বুঝে এবং ব্যবহার করে আরও কার্যকরী I/O অপারেশন তৈরি করতে পারবেন।
Java NIO তে Buffer ব্যবহারের দক্ষতা এবং সঠিক লাইফসাইকেল ব্যবস্থাপনা নিশ্চিত করবে আপনার অ্যাপ্লিকেশনের পারফরম্যান্স।
Read more