পটভূমি
কিছুটা ইনপুট স্ট্রিম একটি বাইটের অ্যারে দ্বারা ব্যাক করা হয়। এমন কয়েকটি মুখ্য পদ্ধতি রয়েছে যা সেই বাইট অ্যারে থেকে বিভিন্ন জোর করে আদিম অ্যারে পড়ে।
সমস্যা
সদৃশ কোড রয়েছে। জাভাতে আদিম ধরণের জেনেরিকের অভাব রয়েছে, তাই সম্ভবত পুনরাবৃত্তিটি অনিবার্য।
কোড
পুনরাবৃত্তি কোড নিম্নলিখিত পদ্ধতিগুলিতে স্পষ্ট:
@Override
public long readBytes(final byte[] out, final int offset, final int count, final int bits) {
final int total = offset + count;
assert out != null;
assert total <= out.length;
final long startPosition = position();
for (int i = offset; i < total; i++) {
out[i] = readByte(bits);
}
return position() - startPosition;
}
@Override
public long readShorts(final short[] out, final int offset, final int count, final int bits) {
final int total = offset + count;
assert out != null;
assert total <= out.length;
final long startPosition = position();
for (int i = offset; i < total; i++) {
out[i] = readShort(bits);
}
return position() - startPosition;
}
নোট কিভাবে final byte[] out
সম্পর্কিত readByte(bits)
ঠিক যেমন final short[] out
সম্পর্ক readShort(bits)
। এই সম্পর্কগুলি সমস্যার ক্রুક્સ।
প্রশ্ন
কোনও সদৃশ পারফরম্যান্স হিট (উদাঃ, অটোবক্সিং দ্বারা) ব্যয় না করে কীভাবে সদৃশতা দূর করা যায়?
সম্পর্কিত
Java lacks generics on primitive types, so perhaps the repetition is unavoidable.
হা. (সাধারণত এটি খুব একটা সমস্যা নয়, যেহেতু একটি প্রোগ্রামের জন্য কয়েকটি ভিন্ন আদিমতার চেয়ে বেশি বিরল প্রয়োজন। আপনি ক্লাসের ভিতরে আদিমগুলি স্থাপন করে এবং অবজেক্ট সিরিয়ালাইজেশন ব্যবহার করে এটি "ফিক্স "ও করতে পারেন, যদিও এটি তুলনামূলকভাবে ধীর হতে পারে)। )
ByteBuffer
মতো পদ্ধতি ব্যবহার করে asDoubleBuffer()
বা asShortBuffer()
অফলোড করবে) code docs.oracle.com/en/java/javase/11/docs/api/java.base/java/nio/…
List<int>
ইত্যাদি 2-2 বা তার বেশি বছরের মধ্যে মুক্তি পেতে পারে। একে প্রকল্প ভালহাল্লা বলা হয়।