পরিচিত পরোক্ষ উপশ্রেণী |
একটি নির্দিষ্ট ধরনের ডেটার একটি ধারক।
DataBuffer
ম্যাপ নেটিভ বা হিপ মেমরি সেগমেন্টের উদাহরণ একটি রৈখিক দৃশ্যে যা সমর্থন করে:
- 64-বিট ইন্ডেক্সিং, 2 31 বাইটের চেয়ে বড় বাফারের সাথে কাজ করার অনুমতি দেয়
- যে কোনো ধরনের বস্তুর সঞ্চয়স্থান এবং শুধুমাত্র আদিম বস্তু নয়
- সাধারণ প্রকারগুলি বক্সযুক্ত প্রকারগুলির সাথে সরাসরি কাজ করার অনুমতি দেয়, যার জন্য সাধারণ JDK বাফারগুলির মতো স্পষ্ট বাফার প্রকারের প্রয়োজন হয় না।
DataBuffer
দ্বারা পরিচালিত মেমরিটি রৈখিক হয় এমন কোনও গ্যারান্টি নেই, বিশেষত যখন অ-আদি ধরনের বা বড় বাফারগুলির সাথে কাজ করা হয়। পাবলিক পদ্ধতি
বিমূর্ত <R> আর | |
বিমূর্ত ডেটাবাফার <T> | |
বিমূর্ত বুলিয়ান | সমান (অবজেক্ট অবজেক্ট) ডেটা বাফারগুলির মধ্যে সমতা পরীক্ষা করে। |
বিমূর্ত টি | 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 | যদি এই বাফারটি শুধুমাত্র পঠনযোগ্য হয় |