คลาสย่อยทางอ้อมที่รู้จัก Bfloat16Layout , BoolLayout , BooleanDataLayout <S ขยาย DataBuffer <?>>, ByteDataLayout <S ขยาย DataBuffer <?>>, DoubleDataLayout <S ขยาย DataBuffer <?>>, Float16Layout , FloatDataLayout <S ขยาย DataBuffer <?>>, IntDataLayout <S ขยาย DataBuffer <?>>, LongDataLayout <S ขยาย DataBuffer <?>>, ShortDataLayout <S ขยาย DataBuffer <?>>, StringLayout |
แปลงข้อมูลที่เก็บไว้ในบัฟเฟอร์ให้เป็นประเภทที่กำหนด
อินสแตนซ์ DataLayout
ใช้เพื่อกำหนดรูปแบบที่กำหนดเองสำหรับจัดเก็บและอ่านข้อมูลของ DataBuffer
โดยจัดให้มีชั้นการแยกระหว่างประเภทของข้อมูลที่จัดเก็บไว้ในบัฟเฟอร์ (ประเภท บัฟเฟอร์ ) และประเภทของข้อมูลที่จัดการโดยผู้ใช้ปลายทาง (ประเภท ผู้ใช้ )
เนื่องจากมีการใช้วิธีการแปลงสำหรับทุกค่าที่เขียนหรืออ่าน การทำงานกับโครงร่างข้อมูลจึงอาจส่งผลเสียต่อประสิทธิภาพ ดังนั้นควรใช้ประเภทดั้งเดิมโดยตรงทุกครั้งที่เป็นไปได้
นอกจากนี้ เราขอแนะนำให้ใช้เลย์เอาต์ข้อมูลที่ไม่เปลี่ยนรูปแบบเพื่อให้สามารถนำไปใช้กับบัฟเฟอร์หลายตัวได้โดยไม่ต้องจัดสรรอินสแตนซ์ใหม่สำหรับแต่ละบัฟเฟอร์ ตัวอย่างเช่น:
class BigIntegerBufferAllocator { public DataBuffer<BigInteger> allocate(long size) { return LAYOUT.applyTo(DataBuffers.ofLongs(size * LAYOUT.scale())); // scale is 1 by default } private static final DataLayout<LongDataBuffer, BigInteger> LAYOUT = new DataLayout<LongDataBuffer, BigInteger>() { @Override public void writeObject(LongDataBuffer buffer, BigInteger value, long index) { buffer.setLong(value.longValue(), index); } @Override public BigInteger readObject(LongDataBuffer buffer, long index) { return BigInteger.valueOf(buffer.getLong(index)); } }; }
วิธีการสาธารณะ
บทคัดย่อ DataBuffer <T> | ApplyTo (บัฟเฟอร์ S) ใช้เค้าโครงนี้กับบัฟเฟอร์ที่ให้มา |
นามธรรมต | readObject (บัฟเฟอร์ S, ดัชนีแบบยาว) อ่านค่า n = scale() จากบัฟเฟอร์ที่ดัชนีที่กำหนดและส่งกลับเป็นค่าเดียวในประเภทผู้ใช้ |
บทคัดย่อ | มาตราส่วน () ระบุจำนวนค่าบัฟเฟอร์ที่จำเป็นในการแสดงค่าผู้ใช้รายเดียว ค่าเริ่มต้นคือ 1 |
ความว่างเปล่าที่เป็นนามธรรม | writeObject (บัฟเฟอร์ S, ค่า T, ดัชนีแบบยาว) เขียนค่าผู้ใช้ลงในบัฟเฟอร์ที่ดัชนีที่กำหนดหลังจากแปลงเป็นประเภทบัฟเฟอร์ |
วิธีการสาธารณะ
DataBuffer นามธรรมสาธารณะ <T> ApplyTo (S บัฟเฟอร์)
ใช้เค้าโครงนี้กับบัฟเฟอร์ที่ให้มา
อินสแตนซ์ DataBuffer
ที่ส่งคืนเป็นเพียงตัวหุ้มของบัฟเฟอร์ดั้งเดิม และไม่มีพื้นที่เก็บข้อมูลสำรองของตัวเอง
พารามิเตอร์
บัฟเฟอร์ | บัฟเฟอร์เป้าหมายที่จะใช้เค้าโครงนี้ |
---|
การส่งคืน
- บัฟเฟอร์ที่มีเค้าโครงนี้
บทคัดย่อสาธารณะ T readObject (บัฟเฟอร์ S, ดัชนีแบบยาว)
อ่านค่า n = scale()
จากบัฟเฟอร์ที่ดัชนีที่กำหนดและส่งกลับเป็นค่าเดียวในประเภทผู้ใช้
เป็นความรับผิดชอบของผู้ดำเนินการอินเทอร์เฟซนี้ในการอ่านค่าที่จะแปลงจากบัฟเฟอร์ที่กำหนด โดยใช้วิธีที่เหมาะสมที่สุด ตัวอย่างเช่น สำหรับเลย์เอาต์ที่แปลง long
เดี่ยวเป็น BigInteger
@Override public BigInteger readObject(LongDataBuffer buffer, long index) { return BigInteger.valueOf(buffer.getLong(index)); }หากค่าผู้ใช้รายเดียวปรับขนาดมากกว่าค่าบัฟเฟอร์มากกว่าหนึ่ง
index
จะระบุตำแหน่งเริ่มต้นของลำดับที่จะอ่านจากบัฟเฟอร์ พารามิเตอร์
บัฟเฟอร์ | บัฟเฟอร์ที่จะอ่าน |
---|---|
ดัชนี | ตำแหน่งของบัฟเฟอร์ที่จะอ่านในบัฟเฟอร์ |
การส่งคืน
- มูลค่าที่แปลงแล้ว
ระดับ int นามธรรมสาธารณะ ()
ระบุจำนวนค่าบัฟเฟอร์ที่จำเป็นในการแสดงค่าผู้ใช้รายเดียว ค่าเริ่มต้นคือ 1
มาตราส่วนต้องเป็นค่าบวกและต้องเป็นจำนวนเต็ม ซึ่งหมายความว่าค่าบัฟเฟอร์เดียวในบัฟเฟอร์ไม่สามารถใช้เพื่อแสดงค่าผู้ใช้มากกว่าหนึ่งค่าได้
โมฆะนามธรรมสาธารณะ writeObject (บัฟเฟอร์ S, ค่า T, ดัชนีแบบยาว)
เขียนค่าผู้ใช้ลงในบัฟเฟอร์ที่ดัชนีที่กำหนดหลังจากแปลงเป็นประเภทบัฟเฟอร์
เป็นความรับผิดชอบของผู้ดำเนินการอินเทอร์เฟซนี้ในการเขียนค่าที่แปลงแล้วไปยังบัฟเฟอร์ที่กำหนดก่อนที่การโทรนี้จะกลับมา โดยใช้วิธีที่เหมาะสมที่สุด ตัวอย่างเช่น สำหรับโครงร่างที่แปลง BigInteger
เป็น single long
@Override public void writeObject(LongDataBuffer buffer, BigInteger value, long index) { buffer.setLong(value.longValue(), index); }หากค่าผู้ใช้รายเดียวขยายขนาดค่าบัฟเฟอร์มากกว่าหนึ่งค่า
index
จะระบุตำแหน่งเริ่มต้นของลำดับที่จะเขียนลงในบัฟเฟอร์ พารามิเตอร์
บัฟเฟอร์ | บัฟเฟอร์ที่จะเขียนถึง |
---|---|
ค่า | ค่าในประเภทผู้ใช้ที่จะแปลงและเขียน |
ดัชนี | ดัชนีในบัฟเฟอร์ที่ควรเขียนค่าที่แปลงแล้ว |