জাভাতে বাইটবফার ব্যবহার কী? [বন্ধ]


198

ByteBufferজাভা এর জন্য উদাহরণস্বরূপ অ্যাপ্লিকেশনগুলি কী কী ? এটি ব্যবহৃত হয় এমন কোনও উদাহরণের তালিকা তৈরি করুন। ধন্যবাদ!


1
অ্যাপাচি হাদুপের সংক্ষেপণ (উদাহরণস্বরূপ zlib কোডেক) jave.nio থেকে বাইটবফার ব্যবহার করে।
নিক্ক

জিপিইউতে ডেটা প্রেরণের জন্য ভাল।
পিক্সেল

উত্তর:


137

এটি এর ব্যবহার এবং ত্রুটিগুলির একটি ভাল বর্ণনা। যখনই আপনাকে দ্রুত নিম্ন-স্তরের আই / ও করার প্রয়োজন হয় তখন আপনি অবশ্যই এটি ব্যবহার করেন। আপনি যদি কোনও টিসিপি / আইপি প্রোটোকল প্রয়োগ করতে যাচ্ছেন বা আপনি যদি একটি ডেটাবেস (ডিবিএমএস) লিখছিলেন তবে এই শ্রেণিটি কাজে আসবে।


3
এটি জাভা এবং ক্যাসান্দ্রা ডিবি ব্যবহার করে উন্নত উচ্চ ট্রাফিক ওয়েবসাইটের কোথাও কার্যকর?
আকলিন 30'11

1
তাত্ক্ষণিক অনুসন্ধানের পরে দেখা যাচ্ছে যে হ্যাঁ, ক্যাসান্দ্রা বাইটবফার ব্যবহার করে: mail-archive.com/commits@cassandra.apache.org/msg14967.html আপনি যদি কোনও কাঁচা ওয়েবসাইট সম্পর্কে ভাবছেন তবে তা থাকতে পারে তবে সাধারণত এটি কেবলমাত্র পরোক্ষভাবে ওয়েবসাইটগুলি ব্যবহার করতে যাচ্ছেন
ক্যাসান্দ্রার

1
একটি খারাপ লিঙ্ক না, ধন্যবাদ। আমি এইটিকে
2012/

খারাপ লিঙ্কটি আমি ভীত ...
রয়েলবিগম্যাক

96

বাইটবফার ক্লাসটি গুরুত্বপূর্ণ কারণ এটি জাভাতে চ্যানেলগুলি ব্যবহারের জন্য একটি ভিত্তি তৈরি করে। বাইটফুফার ক্লাসটি বাইট বাফারগুলির উপর ছয়টি বিভাগের ক্রিয়াকলাপ সংজ্ঞায়িত করেছে, যেমন জাভা 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

56
এই মন্তব্যের বেশিরভাগ অংশটি জাভা 7 ডক্স থেকে অনুলিপি করা হয়েছে ।
জানুস ট্রয়লসেন

6
আপনি যদি একটি সুস্পষ্ট-পার্শ্ব প্রতিক্রিয়া না নিয়ে থাকেন তবে আমি বিশ্বাস করি যে আপনি চূড়ান্তভাবে রাখার জন্য ভুল পদ্ধতিটি ব্যবহার করছেন। জাভাডোক ইঙ্গিত দেয় যে নিরঙ্কুশ পুটের জন্য একটি সূচক মান প্রয়োজন।
চক ওলবার

6
এমনকি এটি এপিআই ডকের কেবল একটি অনুলিপি হলেও এটির স্কোর বিসিএস কিছুটা এটির নজরদারি করা খুব অলস বলে মনে হচ্ছে।
ক্রিস

1
উদাহরণগুলির মধ্যে একটিতে ভুল রয়েছে। "পরম পুট", প্রথম পরামিতিটি মিস করে যা সূচকে উপস্থাপন করে (এই ক্ষেত্রে 0)।
বিভিডিবি

21

স্ট্রিম ওরিয়েন্টেড এপিআই ব্যবহার করে জাভা আইও ব্যবহারকারীর জায়গার মধ্যে ডেটার অস্থায়ী স্টোরেজ হিসাবে বাফার ব্যবহার করে সঞ্চালিত হয়। ডিএমএ দ্বারা ডিস্ক থেকে পড়া ডেটা প্রথমে কার্নেল স্পেসের বাফারগুলিতে অনুলিপি করা হয়, যা পরে ব্যবহারকারীর স্পেসে বাফারে স্থানান্তরিত হয়। সুতরাং ওভারহেড আছে। এটি এড়ানো কার্য সম্পাদনে যথেষ্ট লাভ অর্জন করতে পারে।

কার্নেল স্পেসে বাফারকে সরাসরি অ্যাক্সেস করার কোনও উপায় থাকলে আমরা ব্যবহারকারীর জায়গায় এই অস্থায়ী বাফারটি এড়িয়ে যেতে পারি। জাভা এনআইও এটি করার একটি উপায় সরবরাহ করে।

ByteBufferজাভা এনআইওর দেওয়া বেশ কয়েকটি বাফারের মধ্যে রয়েছে। এটি থেকে ডেটা পড়তে বা এতে ডেটা লেখার জন্য এটি কেবল একটি ধারক বা হোল্ডিং ট্যাঙ্ক। উপরের আচরণ বাফারে allocateDirect()এপিআই ব্যবহার করে সরাসরি বাফার বরাদ্দ করে অর্জন করা হয় ।

বাইট বাফারের জাভা ডকুমেন্টেশনটিতে দরকারী তথ্য রয়েছে।


14

অ্যান্ড্রয়েডে আপনি সি ++ এবং জাভা (ডাইরেক্টএলোক পদ্ধতি সহ) এর মধ্যে ভাগ করে নেওয়া বাফার তৈরি করতে পারেন এবং উভয় পক্ষেই এটি পরিচালনা করতে পারেন।


13

এখানে বাইটফুফার সুবিধাগুলি ব্যাখ্যা করার জন্য একটি দুর্দান্ত নিবন্ধ। নিবন্ধের মূল বিষয়গুলি নিম্নরূপ:

  • স্ট্রাকচার্ড বাইনারি ডেটার দক্ষ র্যান্ডম অ্যাক্সেস (উদাহরণস্বরূপ, উত্তরের স্তরের আইও যেমন উত্তরের একটিতে বলা হয়েছে) নির্বিশেষে কোনও বাইটবফারের প্রথম সুবিধা । জাভা 1.4 এর আগে, এই জাতীয় ডেটা পড়ার জন্য কেউ একটি ডেটা ইনপুটস্ট্রিম ব্যবহার করতে পারে তবে এলোমেলো অ্যাক্সেস ছাড়াই।

সরাসরি বাইটবফার / ম্যাপডবাইটবফার এর জন্য বিশেষত বেনিফিটগুলি রইল। মনে রাখবেন যে সরাসরি বাফারগুলি গাদা বাইরে তৈরি করা হয়:

  1. গিসি চক্র দ্বারা প্রভাবিত : জঞ্জাল সংগ্রহের চক্রের সময় সরাসরি বাফারগুলি সরানো হবে না কারণ তারা স্তূপের বাইরে থাকে। টেরাকোটার বিগমেমোরি ক্যাশিং প্রযুক্তি এই সুবিধার উপর নির্ভর করে বলে মনে হচ্ছে। যদি তারা গাদা হয়ে থাকে তবে এটি জিসি বিরতি দেওয়ার সময়কে ধীর করে দেবে।

  2. পারফরম্যান্স বুস্ট : আইও স্ট্রিমের মধ্যে, কলগুলি সিস্টেম কলগুলিতে আবশ্যক, যার জন্য কার্নেল মোড এবং তদ্বিপরীত ব্যবহারকারীর মধ্যে একটি প্রসঙ্গ-স্যুইচ প্রয়োজন, বিশেষত যদি ফাইলটি অবিচ্ছিন্নভাবে অ্যাক্সেস করা হচ্ছে তবে ব্যয়বহুল হবে। যাইহোক, মেমরি-ম্যাপিংয়ের সাথে এই প্রসঙ্গে-স্যুইচিং হ্রাস করা হয় কারণ মেমরিতে ডেটা সন্ধানের সম্ভাবনা বেশি থাকে (ম্যাপডবাইটবফার)। যদি মেমরিতে ডেটা উপলভ্য থাকে তবে এটি ওএস চালনা ছাড়াই সরাসরি অ্যাক্সেস করা যায়, কোনও প্রসঙ্গ-স্যুইচিং।

দ্রষ্টব্য যে ম্যাপডবাইটবফারগুলি খুব দরকারী যদি বিশেষত ফাইলগুলি বড় হয় এবং কয়েকটি গ্রুপ ব্লকের বেশি ঘন ঘন অ্যাক্সেস করা হয়।

  1. পৃষ্ঠা ভাগ করা : মেমরি ম্যাপযুক্ত ফাইলগুলি প্রক্রিয়াগুলির মধ্যে ভাগ করা যায় কারণ এগুলি প্রক্রিয়াটির ভার্চুয়াল মেমরি স্পেসে বরাদ্দ করা হয় এবং প্রক্রিয়াগুলিতে ভাগ করা যায়।
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.