এটি কি বাইটবফার থেকে বাইটগুলি পাওয়ার প্রস্তাবিত উপায়
ByteBuffer bb =..
byte[] b = new byte[bb.remaining()]
bb.get(b, 0, b.length);
উত্তর:
আপনি যা করতে চান তা নির্ভর করে।
আপনি যা চান তা যদি বাকী বাক্সগুলি পুনরুদ্ধার করা হয় (অবস্থান এবং সীমাতে), তবে আপনার যা আছে তা কাজ করবে। আপনি ঠিক করতে পারেন:
ByteBuffer bb =..
byte[] b = new byte[bb.remaining()];
bb.get(b);
যা বাইটবফার জাভাদোকসের সমতুল্য ।
bb.slice().remaining()
। আসল বাফারটি স্পর্শ না করে সেটিকে দেখে মনে হচ্ছে কোনও পরিষ্কার ডাম্প।
int
বিটমাস্ক হিসাবে cast ালাই এবং ব্যবহার করতে হবে । int unsigned_byte = b[k] & 0xff;
k
ByteBuffer#clear
প্রথমে কল করবেন ?
মনে রাখবেন যে bb.array () বাইট-বাফারদের অবস্থানকে সম্মান করে না এবং আপনি যে বাইটবফারটি নিয়ে কাজ করছেন তা অন্য কোনও বাফারের টুকরা হলে আরও খারাপ হতে পারে।
অর্থাৎ
byte[] test = "Hello World".getBytes("Latin1");
ByteBuffer b1 = ByteBuffer.wrap(test);
byte[] hello = new byte[6];
b1.get(hello); // "Hello "
ByteBuffer b2 = b1.slice(); // position = 0, string = "World"
byte[] tooLong = b2.array(); // Will NOT be "World", but will be "Hello World".
byte[] world = new byte[5];
b2.get(world); // world = "World"
যা আপনি যা করতে চান তা নাও হতে পারে।
আপনি যদি সত্যিই বাইট-অ্যারে অনুলিপি করতে না চান, তবে একটি কাজ চারপাশে বাইট-বাফারের অ্যারেঅফসেট () + অবশিষ্ট () ব্যবহার করা যেতে পারে, তবে এটি কেবল তখনই কাজ করে যদি অ্যাপ্লিকেশনটি বাইট-বাফারগুলির সূচি + দৈর্ঘ্য সমর্থন করে works চাহিদা.
এর মত সহজ
private static byte[] getByteArrayFromByteBuffer(ByteBuffer byteBuffer) {
byte[] bytesArray = new byte[byteBuffer.remaining()];
byteBuffer.get(bytesArray, 0, bytesArray.length);
return bytesArray;
}
প্রদত্ত (প্রত্যক্ষ) বাইটফুফারের অভ্যন্তরীণ অবস্থা সম্পর্কে যদি কেউ কিছু না জানে এবং বাফারের পুরো সামগ্রীটি পুনরুদ্ধার করতে চায় তবে এটি ব্যবহার করা যেতে পারে:
ByteBuffer byteBuffer = ...;
byte[] data = new byte[byteBuffer.capacity()];
((ByteBuffer) byteBuffer.duplicate().clear()).get(data);
ByteBuffer.get(byte[])
একটি ফেরৎByteBuffer
data
পরিবর্তনশীল হয়। গ্রাহক ফিরে আসেন this
, এর জাভাডোকটি দেখুন।
এটি বাইট পাওয়ার সহজ উপায় [] তবে বাইটবফার ব্যবহারের বিষয়টির একটি অংশ বাইট তৈরি করা এড়িয়ে চলেছে []। সম্ভবত আপনি বাইট [] থেকে বাইটবফার থেকে সরাসরি যা পেতে চেয়েছিলেন তা পেতে পারেন।
bb.capacity()
হতে পারেbb.remaining()
, তাই আপনার সঠিকতা কখনbb.array()
সঠিক হবে তা পরীক্ষা হিসাবে ব্যবহার করবেন না । দেখুনByteBuffer.slice()
।