DataBuffer

পাবলিক ইন্টারফেস DataBuffer
পরিচিত পরোক্ষ উপশ্রেণী

একটি নির্দিষ্ট ধরনের ডেটার একটি ধারক।

DataBuffer ম্যাপ নেটিভ বা হিপ মেমরি সেগমেন্টের উদাহরণ একটি রৈখিক দৃশ্যে যা সমর্থন করে:

  • 64-বিট ইন্ডেক্সিং, 2 31 বাইটের চেয়ে বড় বাফারের সাথে কাজ করার অনুমতি দেয়
  • যে কোনো ধরনের বস্তুর সঞ্চয়স্থান এবং শুধুমাত্র আদিম বস্তু নয়
  • সাধারণ প্রকারগুলি বক্সযুক্ত প্রকারগুলির সাথে সরাসরি কাজ করার অনুমতি দেয়, যার জন্য সাধারণ JDK বাফারগুলির মতো স্পষ্ট বাফার প্রকারের প্রয়োজন হয় না।
এটি লক্ষ করা গুরুত্বপূর্ণ যে DataBuffer দ্বারা পরিচালিত মেমরিটি রৈখিক হয় এমন কোনও গ্যারান্টি নেই, বিশেষত যখন অ-আদি ধরনের বা বড় বাফারগুলির সাথে কাজ করা হয়।

পাবলিক পদ্ধতি

বিমূর্ত <R> আর
গ্রহণ করুন ( DataStorageVisitor <R> পরিদর্শক)
এই বাফারের ব্যাকিং স্টোরেজ পরিদর্শন করে।
বিমূর্ত ডেটাবাফার <T>
কপিটু ( ডেটাবাফার <T> dst, দীর্ঘ আকার)
এই বাফারে সোর্স অ্যারের অবজেক্টের রেফারেন্স লিখুন।
বিমূর্ত বুলিয়ান
সমান (অবজেক্ট অবজেক্ট)
ডেটা বাফারগুলির মধ্যে সমতা পরীক্ষা করে।
বিমূর্ত টি
getObject (লম্বা সূচক)
প্রদত্ত সূচকে মান পড়ে।
বিমূর্ত বুলিয়ান
শুধুমাত্র পঠনযোগ্য ()
এই বাফারটি একটি অ্যাক্সেসযোগ্য অ্যারে দ্বারা সমর্থিত কিনা তা বলে।
বিমূর্ত ডেটাবাফার <T>
সরু (দীর্ঘ আকার)
একটি নতুন বাফার তৈরি করে যার বিষয়বস্তু এই বাফারের বিষয়বস্তুর একটি ভাগ করা অনুসারী, যার আকার প্রদত্ত মানের সাথে সেট করা আছে।
বিমূর্ত ডেটাবাফার <T>
অফসেট (দীর্ঘ সূচক)
একটি নতুন বাফার তৈরি করে যার বিষয়বস্তু প্রদত্ত সূচী থেকে শুরু করে এই বাফারের বিষয়বস্তুর একটি ভাগ করা পরবর্তী অংশ।
বিমূর্ত ডেটাবাফার <T>
পড়ুন (T[] dst)
গন্তব্য অ্যারেতে এই বাফারের বস্তুর রেফারেন্স পড়ুন।
বিমূর্ত ডেটাবাফার <T>
পড়ুন (T[] dst, int অফসেট, int দৈর্ঘ্য)
গন্তব্য অ্যারেতে এই বাফারের বস্তুর রেফারেন্স পড়ুন।
বিমূর্ত ডেটাবাফার <T>
সেটঅবজেক্ট (টি মান, দীর্ঘ সূচক)
প্রদত্ত সূচকে এই বাফারে প্রদত্ত মানটি লেখে।
বিমূর্ত দীর্ঘ
আকার ()
উপাদানে বাফারের আকার।
বিমূর্ত ডেটাবাফার <T>
স্লাইস (লম্বা সূচক, লম্বা আকার)
একটি নতুন বাফার তৈরি করে যার বিষয়বস্তু প্রদত্ত সূচী থেকে শুরু করে এবং প্রদত্ত আকারের এই বাফারের বিষয়বস্তুর একটি ভাগ করা পরবর্তী অংশ।
বিমূর্ত DataBufferWindow <? ডেটাবাফার <T>> প্রসারিত করে
জানালা (দীর্ঘ আকার)
একটি DataBufferWindow তৈরি করে যা এই বাফারটির একটি আংশিক দৃশ্য প্রদান করে।
বিমূর্ত ডেটাবাফার <T>
লিখুন (T[] src)
এই বাফারে সোর্স অ্যারের অবজেক্টের রেফারেন্স লিখুন।
বিমূর্ত ডেটাবাফার <T>
লিখুন (T[] src, int অফসেট, int দৈর্ঘ্য)
বাল্ক পুট পদ্ধতি, int অ্যারে ব্যবহার করে।

পাবলিক পদ্ধতি

সর্বজনীন বিমূর্ত R গ্রহণ ( DataStorageVisitor <R> পরিদর্শক)

এই বাফারের ব্যাকিং স্টোরেজ পরিদর্শন করে।

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

পরামিতি
দর্শনার্থী এই বাফারের ডেটা স্টোরেজ পরিদর্শন করে
রিটার্নস
  • একই মান দর্শক দ্বারা ফেরত

সর্বজনীন বিমূর্ত DataBuffer <T> copyTo ( DataBuffer <T> dst, দীর্ঘ আকার)

এই বাফারে সোর্স অ্যারের অবজেক্টের রেফারেন্স লিখুন।

যদি গন্তব্য বাফার আকারের থেকে অনুলিপি করার জন্য বেশি মান থাকে, যেমন size > dst.size() , তাহলে কোনো মান স্থানান্তর করা হয় না এবং একটি BufferOverflowException নিক্ষেপ করা হয়। অন্যদিকে, উৎস বাফার সাইজ, যেমন > src.size() কপি করার জন্য যদি আরও মান থাকে, তাহলে একটি BufferUnderfloatException নিক্ষেপ করা হবে।

অন্যথায়, এই পদ্ধতিটি এই বাফার থেকে গন্তব্য বাফারে n = size মান কপি করে।

পরামিতি
dst গন্তব্য বাফার যেখানে মান অনুলিপি করা হয়; এই বাফার হতে হবে না
আকার গন্তব্য বাফারে কপি করার জন্য মানগুলির সংখ্যা
রিটার্নস
  • এই বাফার
নিক্ষেপ করে
অবৈধ আর্গুমেন্ট ব্যতিক্রম যদি গন্তব্য বাফার এই বাফার হয়
ReadOnlyBufferException যদি গন্তব্য বাফার শুধুমাত্র পঠনযোগ্য হয়
BufferOverflowException যদি গন্তব্য বাফারে পর্যাপ্ত স্থান না থাকে
BufferUnderflowException উৎস বাফারে পর্যাপ্ত মান না থাকলে

সর্বজনীন বিমূর্ত বুলিয়ান সমান (অবজেক্ট অবজেক্ট)

ডেটা বাফারগুলির মধ্যে সমতা পরীক্ষা করে।

একটি ডেটা বাফার অন্য বস্তুর সমান যদি এই বস্তুটি একই আকারের আরেকটি DataBuffer হয়, টাইপ এবং উপাদানগুলি সমান এবং একই ক্রমে হয়। যেমন:

IntDataBuffer buffer = DataBuffers.of(1, 2, 3);

 assertEquals(buffer, DataBuffers.of(1, 2, 3));  // true
 assertEquals(buffer, DataBuffers.ofObjects(1, 2, 3));  // true, as Integers are equal to ints
 assertNotEquals(buffer, DataBuffers.of(1, 2, 3, 0));  // false, different sizes
 assertNotEquals(buffer, DataBuffers.of(1, 3, 2));  // false, different order
 assertNotEquals(buffer, DataBuffers.of(1L, 2L, 3L));  // false, different types
 

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

পরামিতি
বস্তু এই বাফারের সাথে তুলনা করতে বস্তু
রিটার্নস
  • সত্য যদি এই বাফারটি প্রদত্ত বস্তুর সমান হয়

পাবলিক বিমূর্ত T getObject (দীর্ঘ সূচক)

প্রদত্ত সূচকে মান পড়ে। গুরুত্বপূর্ণ: এই পদ্ধতির ব্যবহার নন-প্রিমিটিভ ধরনের বাফারের মধ্যে সীমাবদ্ধ হওয়া উচিত বা যখন কলকারীর দ্বারা ডেটা টাইপ নির্ধারকভাবে জানা যায় না। অন্য কোনো ক্ষেত্রে, এর আদিম বৈকল্পিক ব্যবহারকে অগ্রাধিকার দিন যা উল্লেখযোগ্যভাবে পারফরম্যান্সকে উন্নত করবে (যেমন IntDataBuffer.getInt(idx)

পরামিতি
সূচক যে সূচী থেকে ফ্লোট পড়া হবে
রিটার্নস
  • প্রদত্ত সূচকে মান
নিক্ষেপ করে
IndexOutOfBoundsException যদি সূচক ঋণাত্মক হয় বা বাফার আকারের চেয়ে ছোট না হয়

পাবলিক বিমূর্ত বুলিয়ান isOnly ()

এই বাফারটি একটি অ্যাক্সেসযোগ্য অ্যারে দ্বারা সমর্থিত কিনা তা বলে।

রিটার্নস
  • সত্য যদি, এবং শুধুমাত্র যদি, এই বাফারটি শুধুমাত্র পঠনযোগ্য

সর্বজনীন বিমূর্ত ডেটাবাফার <T> সংকীর্ণ (দীর্ঘ আকার)

একটি নতুন বাফার তৈরি করে যার বিষয়বস্তু এই বাফারের বিষয়বস্তুর একটি ভাগ করা অনুসারী, যার আকার প্রদত্ত মানের সাথে সেট করা আছে।

নতুন আকার এই বাফার আকারের চেয়ে বড় হওয়া উচিত নয়। এই বাফারের বিষয়বস্তুর পরিবর্তনগুলি নতুন বাফারে দৃশ্যমান হবে এবং এর বিপরীতে। নতুন বাফারটি শুধুমাত্র পঠনযোগ্য হবে, এবং শুধুমাত্র যদি, এই বাফারটি শুধুমাত্র পঠনযোগ্য হয়।

এই কলটি slice(0, size) এর সমতুল্য

পরামিতি
আকার এই নতুন বাফার আকার
রিটার্নস
  • নতুন বাফার
নিক্ষেপ করে
অবৈধ আর্গুমেন্ট ব্যতিক্রম যদি সূচী এবং/অথবা আকারের মান যাচাইকরণ পরীক্ষায় উত্তীর্ণ না হয়

সর্বজনীন বিমূর্ত DataBuffer <T> অফসেট (দীর্ঘ সূচক)

একটি নতুন বাফার তৈরি করে যার বিষয়বস্তু প্রদত্ত সূচী থেকে শুরু করে এই বাফারের বিষয়বস্তুর একটি ভাগ করা পরবর্তী অংশ।

সূচকটি এই বাফার আকারের চেয়ে বেশি হওয়া উচিত নয়৷ এই বাফারের বিষয়বস্তুর পরিবর্তনগুলি নতুন বাফারে দৃশ্যমান হবে এবং এর বিপরীতে। নতুন বাফারটি শুধুমাত্র পঠনযোগ্য হবে, এবং শুধুমাত্র যদি, এই বাফারটি শুধুমাত্র পঠনযোগ্য হয়।

এই কলটি slice(index, size() - index) এর সমতুল্য

পরামিতি
সূচক তৈরি করা নতুন বাফারের প্রথম মানের সূচক, size() থেকে বেশি হওয়া উচিত নয়
রিটার্নস
  • নতুন বাফার
নিক্ষেপ করে
অবৈধ আর্গুমেন্ট ব্যতিক্রম যদি সূচী বৈধতা চেক পাস না

সর্বজনীন বিমূর্ত DataBuffer <T> রিড (T[] dst)

গন্তব্য অ্যারেতে এই বাফারের বস্তুর রেফারেন্স পড়ুন।

এই পদ্ধতিটি এই বাফার থেকে প্রদত্ত গন্তব্য অ্যারেতে মান স্থানান্তর করে। যদি অনুরোধটি পূরণ করার জন্য প্রয়োজনের তুলনায় বাফারে কম মান থাকে, অর্থাৎ, যদি dst.length > size() , তাহলে কোনো মান স্থানান্তর করা হয় না এবং একটি BufferUnderflowException নিক্ষেপ করা হয়।

অন্যথায়, এই পদ্ধতিটি প্রদত্ত অ্যারেতে এই বাফার থেকে n = dst.length মানগুলি কপি করে।

পরামিতি
dst যে বিন্যাসে মান লিখতে হবে
রিটার্নস
  • এই বাফার
নিক্ষেপ করে
BufferUnderflowException যদি এই বাফার থেকে অনুলিপি করার জন্য পর্যাপ্ত মান না থাকে

সর্বজনীন বিমূর্ত ডেটাবাফার <T> রিড (T[] dst, int অফসেট, int দৈর্ঘ্য)

গন্তব্য অ্যারেতে এই বাফারের বস্তুর রেফারেন্স পড়ুন।

এই পদ্ধতিটি এই বাফার থেকে প্রদত্ত গন্তব্য অ্যারেতে মান স্থানান্তর করে। যদি অনুরোধটি পূরণ করার জন্য প্রয়োজনের তুলনায় বাফারে কম মান থাকে, অর্থাৎ যদি length > size() , তাহলে কোনো মান স্থানান্তর করা হয় না এবং একটি BufferUnderflowException নিক্ষেপ করা হয়।

অন্যথায়, এই পদ্ধতিটি প্রদত্ত অফসেট থেকে শুরু করে প্রদত্ত অ্যারেতে এই বাফার থেকে n = length মান কপি করে।

পরামিতি
dst যে বিন্যাসে মান লিখতে হবে
অফসেট প্রথম মানের অ্যারের মধ্যে অফসেট লিখতে হবে; অ-নেতিবাচক এবং dst.length এর চেয়ে বড় হতে হবে না
দৈর্ঘ্য প্রদত্ত অ্যারেতে লিখতে হবে সর্বোচ্চ সংখ্যক মান; অ-নেতিবাচক এবং dst.length - offset চেয়ে বড় হতে হবে না
রিটার্নস
  • এই বাফার
নিক্ষেপ করে
BufferUnderflowException যদি এই বাফারে দৈর্ঘ্যের থেকে কম মান অবশিষ্ট থাকে
IndexOutOfBoundsException যদি অফসেট এবং দৈর্ঘ্যের পরামিতিগুলির পূর্বশর্তগুলি ধরে না থাকে

সর্বজনীন বিমূর্ত DataBuffer <T> setObject (T মান, দীর্ঘ সূচক)

প্রদত্ত সূচকে এই বাফারে প্রদত্ত মানটি লেখে। গুরুত্বপূর্ণ: এই পদ্ধতির ব্যবহার নন-প্রিমিটিভ ধরনের বাফারের মধ্যে সীমাবদ্ধ হওয়া উচিত বা যখন কলকারীর দ্বারা ডেটা টাইপ নির্ধারকভাবে জানা যায় না। অন্য কোনো ক্ষেত্রে, এর আদিম বৈকল্পিক ব্যবহারকে অগ্রাধিকার দিন যা উল্লেখযোগ্যভাবে পারফরম্যান্সকে উন্নত করবে (যেমন IntDataBuffer.setInt(idx)

পরামিতি
মান লেখার মান
সূচক যে সূচীতে মান লেখা হবে
রিটার্নস
  • এই বাফার
নিক্ষেপ করে
IndexOutOfBoundsException যদি সূচক ঋণাত্মক হয় বা বাফার আকারের চেয়ে ছোট না হয়
ReadOnlyBufferException যদি এই বাফারটি শুধুমাত্র পঠনযোগ্য হয়

পাবলিক বিমূর্ত লম্বা আকার ()

উপাদানে বাফারের আকার।

উদাহরণস্বরূপ, একটি বাইট বাফারের ক্ষেত্রে, এই মানটি এই বাফার ধারণ করতে পারে এমন বাইটের সংখ্যার সমান। একটি পূর্ণসংখ্যা বাফারের জন্য, এটি পূর্ণসংখ্যার সংখ্যার সমান, তাই এই বাফারের বাইটের আকার হল size() * Integer.BYTES

রিটার্নস
  • বাফার আকার

সর্বজনীন বিমূর্ত DataBuffer <T> স্লাইস (দীর্ঘ সূচক, দীর্ঘ আকার)

একটি নতুন বাফার তৈরি করে যার বিষয়বস্তু প্রদত্ত সূচী থেকে শুরু করে এবং প্রদত্ত আকারের এই বাফারের বিষয়বস্তুর একটি ভাগ করা পরবর্তী অংশ।

ইনডেক্স প্লাস নতুন আকার এই বাফার আকারের চেয়ে বেশি হওয়া উচিত নয়। এই বাফারের বিষয়বস্তুর পরিবর্তনগুলি নতুন বাফারে দৃশ্যমান হবে এবং এর বিপরীতে। নতুন বাফারটি শুধুমাত্র পঠনযোগ্য হবে, এবং শুধুমাত্র যদি, এই বাফারটি শুধুমাত্র পঠনযোগ্য হয়।

পরামিতি
সূচক তৈরি করা নতুন বাফারের প্রথম মানের সূচক
আকার এই নতুন বাফারের আকার, size() থেকে বেশি হওয়া উচিত নয়
রিটার্নস
  • নতুন বাফার
নিক্ষেপ করে
অবৈধ আর্গুমেন্ট ব্যতিক্রম সাইজ মান যদি বৈধতা চেক পাস না

সর্বজনীন বিমূর্ত DataBufferWindow <? ডেটাবাফার <T>> উইন্ডো প্রসারিত করে (দীর্ঘ আকার)

একটি DataBufferWindow তৈরি করে যা এই বাফারটির একটি আংশিক দৃশ্য প্রদান করে।

তৈরি করা উইন্ডোটির একটি নির্দিষ্ট আকার রয়েছে এবং offset(long) এর মতো একটি নতুন বাফার ইনস্ট্যান্স বরাদ্দ না করে ডেটার বিভিন্ন ভিউ প্রদান করতে এই বাফার বরাবর "slide" করতে পারে। এই অপারেশনটি ঘন ঘন পুনরাবৃত্তি হলে এটি সামগ্রিক কর্মক্ষমতা উন্নত করে। যেমন:

IntDataBuffer bufferA = DataBuffers.ofInts(1024);
 // ... init buffer data
 IntDataBuffer bufferB = DataBuffers.ofInts(1, 2, 3, 4);

 // Return the index of the first occurrence of bufferB in bufferA using a sliding window
 DataBufferWindow<IntDataBuffer> windowA = bufferA.window(4);
 for (int i = 0; i < bufferA.size() - bufferB.size(); ++i) {
     if (windowA.slideTo(i).buffer().equals(bufferB)) {
         return i;
     
 }
 }

প্রত্যাবর্তিত বস্তু রাষ্ট্রীয় এবং থ্রেড-নিরাপদ নয়।

পরামিতি
আকার জানালার আকার
রিটার্নস
  • একটি নতুন উইন্ডো যা এই বাফারের সূচক 0 এ শুরু হয়
নিক্ষেপ করে
অসমর্থিত অপারেশন ব্যতিক্রম যদি এই ধরনের বাফার বাফার উইন্ডো সমর্থন না করে

সর্বজনীন বিমূর্ত DataBuffer <T> লিখুন (T[] src)

এই বাফারে সোর্স অ্যারের অবজেক্টের রেফারেন্স লিখুন।

এই পদ্ধতিটি প্রদত্ত সোর্স অ্যারের মানগুলিকে এই বাফারে স্থানান্তর করে। যদি এই বাফারের তুলনায় সোর্স অ্যারেতে বেশি মান থাকে, অর্থাৎ, যদি src.length > size() , তাহলে কোনো মান স্থানান্তর করা হবে না এবং একটি BufferOverflowException নিক্ষেপ করা হবে।

অন্যথায়, এই পদ্ধতিটি প্রদত্ত অ্যারে থেকে n = src.length মান কপি করে।

পরামিতি
src উৎস অ্যারে যা থেকে মান পড়তে হবে
রিটার্নস
  • এই বাফার
নিক্ষেপ করে
BufferOverflowException যদি উৎস অ্যারের মানগুলির জন্য এই বাফারে অপর্যাপ্ত স্থান থাকে
ReadOnlyBufferException যদি এই বাফারটি শুধুমাত্র পঠনযোগ্য হয়

সর্বজনীন বিমূর্ত DataBuffer <T> লিখুন (T[] src, int অফসেট, int দৈর্ঘ্য)

বাল্ক পুট পদ্ধতি, int অ্যারে ব্যবহার করে।

এই পদ্ধতিটি প্রদত্ত সোর্স অ্যারের মানগুলিকে এই বাফারে স্থানান্তর করে। যদি এই বাফারের তুলনায় সোর্স অ্যারেতে বেশি মান থাকে, অর্থাৎ, যদি length > size() , তাহলে কোনো মান স্থানান্তর করা হয় না এবং একটি BufferOverflowException নিক্ষেপ করা হয়।

অন্যথায়, এই পদ্ধতিটি প্রদত্ত অ্যারে থেকে n = length মানগুলিকে এই বাফারে কপি করে, প্রদত্ত অফসেট থেকে শুরু করে।

পরামিতি
src উৎস অ্যারে যা থেকে মান পড়তে হবে
অফসেট পড়া হবে প্রথম মানের অ্যারের মধ্যে অফসেট; অ-নেতিবাচক এবং src.length এর চেয়ে বড় হতে হবে না
দৈর্ঘ্য প্রদত্ত অ্যারে থেকে পড়ার মানগুলির সংখ্যা; অ-নেতিবাচক এবং src.length - offset চেয়ে বড় হতে হবে না
রিটার্নস
  • এই বাফার
নিক্ষেপ করে
BufferOverflowException যদি উৎস অ্যারের মানগুলির জন্য এই বাফারে অপর্যাপ্ত স্থান থাকে
IndexOutOfBoundsException যদি অফসেট এবং দৈর্ঘ্যের পরামিতিগুলির পূর্বশর্তগুলি ধরে না থাকে
ReadOnlyBufferException যদি এই বাফারটি শুধুমাত্র পঠনযোগ্য হয়