ByteBuffer
জাভা এর জন্য উদাহরণস্বরূপ অ্যাপ্লিকেশনগুলি কী কী ? এটি ব্যবহৃত হয় এমন কোনও উদাহরণের তালিকা তৈরি করুন। ধন্যবাদ!
ByteBuffer
জাভা এর জন্য উদাহরণস্বরূপ অ্যাপ্লিকেশনগুলি কী কী ? এটি ব্যবহৃত হয় এমন কোনও উদাহরণের তালিকা তৈরি করুন। ধন্যবাদ!
উত্তর:
এটি এর ব্যবহার এবং ত্রুটিগুলির একটি ভাল বর্ণনা। যখনই আপনাকে দ্রুত নিম্ন-স্তরের আই / ও করার প্রয়োজন হয় তখন আপনি অবশ্যই এটি ব্যবহার করেন। আপনি যদি কোনও টিসিপি / আইপি প্রোটোকল প্রয়োগ করতে যাচ্ছেন বা আপনি যদি একটি ডেটাবেস (ডিবিএমএস) লিখছিলেন তবে এই শ্রেণিটি কাজে আসবে।
বাইটবফার ক্লাসটি গুরুত্বপূর্ণ কারণ এটি জাভাতে চ্যানেলগুলি ব্যবহারের জন্য একটি ভিত্তি তৈরি করে। বাইটফুফার ক্লাসটি বাইট বাফারগুলির উপর ছয়টি বিভাগের ক্রিয়াকলাপ সংজ্ঞায়িত করেছে, যেমন জাভা document নথিটিতে বলা হয়েছে :
পরম এবং আপেক্ষিক পেতে এবং করা পদ্ধতি পড়া এবং একক বাইট লিখতে;
আপেক্ষিক বাল্ক এমন পদ্ধতিগুলি পান যা এই বাফার থেকে বাইটের সংযুক্তি ক্রমগুলি একটি অ্যারেতে স্থানান্তর করে;
আপেক্ষিক বাল্ক এমন পদ্ধতিগুলি রাখে যা বাইট অ্যারে বা কিছু অন্যান্য বাইট বাফার থেকে এই বাফারের মধ্যে বাইটের সুসংগত ক্রমগুলি স্থানান্তর করে;
পরম এবং আপেক্ষিকভাবে এমন পদ্ধতিগুলি পাওয়া যায় যা অন্যান্য আদিম ধরণের মানগুলি পড়তে এবং লিখতে পারে এবং একটি নির্দিষ্ট বাইট ক্রমে বাইটের ক্রমগুলি থেকে এবং অনুবাদ করে;
ভিউ বাফার তৈরির পদ্ধতিগুলি, যা বাইট বাফারকে কিছু অন্যান্য আদিম ধরণের মান সমেত বাফার হিসাবে দেখার অনুমতি দেয়; এবং
কমপ্যাক্ট , সদৃশকরণ এবং বাইট বাফার কেটে দেওয়ার জন্য পদ্ধতি ।
Example code : Putting Bytes into a buffer.
// Create an empty ByteBuffer with a 10 byte capacity
ByteBuffer bbuf = ByteBuffer.allocate(10);
// Get the buffer's capacity
int capacity = bbuf.capacity(); // 10
// Use the absolute put(int, byte).
// This method does not affect the position.
bbuf.put(0, (byte)0xFF); // position=0
// Set the position
bbuf.position(5);
// Use the relative put(byte)
bbuf.put((byte)0xFF);
// Get the new position
int pos = bbuf.position(); // 6
// Get remaining byte count
int rem = bbuf.remaining(); // 4
// Set the limit
bbuf.limit(7); // remaining=1
// This convenience method sets the position to 0
bbuf.rewind(); // remaining=7
স্ট্রিম ওরিয়েন্টেড এপিআই ব্যবহার করে জাভা আইও ব্যবহারকারীর জায়গার মধ্যে ডেটার অস্থায়ী স্টোরেজ হিসাবে বাফার ব্যবহার করে সঞ্চালিত হয়। ডিএমএ দ্বারা ডিস্ক থেকে পড়া ডেটা প্রথমে কার্নেল স্পেসের বাফারগুলিতে অনুলিপি করা হয়, যা পরে ব্যবহারকারীর স্পেসে বাফারে স্থানান্তরিত হয়। সুতরাং ওভারহেড আছে। এটি এড়ানো কার্য সম্পাদনে যথেষ্ট লাভ অর্জন করতে পারে।
কার্নেল স্পেসে বাফারকে সরাসরি অ্যাক্সেস করার কোনও উপায় থাকলে আমরা ব্যবহারকারীর জায়গায় এই অস্থায়ী বাফারটি এড়িয়ে যেতে পারি। জাভা এনআইও এটি করার একটি উপায় সরবরাহ করে।
ByteBuffer
জাভা এনআইওর দেওয়া বেশ কয়েকটি বাফারের মধ্যে রয়েছে। এটি থেকে ডেটা পড়তে বা এতে ডেটা লেখার জন্য এটি কেবল একটি ধারক বা হোল্ডিং ট্যাঙ্ক। উপরের আচরণ বাফারে allocateDirect()
এপিআই ব্যবহার করে সরাসরি বাফার বরাদ্দ করে অর্জন করা হয় ।
এখানে বাইটফুফার সুবিধাগুলি ব্যাখ্যা করার জন্য একটি দুর্দান্ত নিবন্ধ। নিবন্ধের মূল বিষয়গুলি নিম্নরূপ:
সরাসরি বাইটবফার / ম্যাপডবাইটবফার এর জন্য বিশেষত বেনিফিটগুলি রইল। মনে রাখবেন যে সরাসরি বাফারগুলি গাদা বাইরে তৈরি করা হয়:
গিসি চক্র দ্বারা প্রভাবিত : জঞ্জাল সংগ্রহের চক্রের সময় সরাসরি বাফারগুলি সরানো হবে না কারণ তারা স্তূপের বাইরে থাকে। টেরাকোটার বিগমেমোরি ক্যাশিং প্রযুক্তি এই সুবিধার উপর নির্ভর করে বলে মনে হচ্ছে। যদি তারা গাদা হয়ে থাকে তবে এটি জিসি বিরতি দেওয়ার সময়কে ধীর করে দেবে।
পারফরম্যান্স বুস্ট : আইও স্ট্রিমের মধ্যে, কলগুলি সিস্টেম কলগুলিতে আবশ্যক, যার জন্য কার্নেল মোড এবং তদ্বিপরীত ব্যবহারকারীর মধ্যে একটি প্রসঙ্গ-স্যুইচ প্রয়োজন, বিশেষত যদি ফাইলটি অবিচ্ছিন্নভাবে অ্যাক্সেস করা হচ্ছে তবে ব্যয়বহুল হবে। যাইহোক, মেমরি-ম্যাপিংয়ের সাথে এই প্রসঙ্গে-স্যুইচিং হ্রাস করা হয় কারণ মেমরিতে ডেটা সন্ধানের সম্ভাবনা বেশি থাকে (ম্যাপডবাইটবফার)। যদি মেমরিতে ডেটা উপলভ্য থাকে তবে এটি ওএস চালনা ছাড়াই সরাসরি অ্যাক্সেস করা যায়, কোনও প্রসঙ্গ-স্যুইচিং।
দ্রষ্টব্য যে ম্যাপডবাইটবফারগুলি খুব দরকারী যদি বিশেষত ফাইলগুলি বড় হয় এবং কয়েকটি গ্রুপ ব্লকের বেশি ঘন ঘন অ্যাক্সেস করা হয়।