คลาสย่อยทางอ้อมที่รู้จัก |
ที่เก็บข้อมูลประเภทเฉพาะ
อินสแตนซ์ของ DataBuffer
จะแมปเซ็กเมนต์หน่วยความจำดั้งเดิมหรือฮีปเป็นมุมมองเชิงเส้นที่รองรับ:
- การทำดัชนีแบบ 64 บิต ทำให้สามารถทำงานกับบัฟเฟอร์ที่มีขนาดใหญ่กว่า 2 31 ไบต์ได้
- การจัดเก็บวัตถุทุกประเภทและไม่ใช่เฉพาะวัตถุดั้งเดิมเท่านั้น
- ประเภททั่วไปอนุญาตให้ทำงานโดยตรงกับประเภทชนิดบรรจุกล่องเช่นกัน ซึ่งไม่ต้องการประเภทบัฟเฟอร์ที่ชัดเจนเหมือนกับบัฟเฟอร์ JDK มาตรฐาน
DataBuffer
จะเป็นแบบเส้นตรง โดยเฉพาะอย่างยิ่งเมื่อต้องจัดการกับประเภทที่ไม่ใช่แบบดั้งเดิมหรือบัฟเฟอร์ขนาดใหญ่ วิธีการสาธารณะ
นามธรรม <R> อาร์ | |
บทคัดย่อ DataBuffer <T> | |
บูลีนนามธรรม | เท่ากับ (วัตถุ obj) ตรวจสอบความเท่าเทียมกันระหว่างบัฟเฟอร์ข้อมูล |
นามธรรมต | getObject (ดัชนีแบบยาว) อ่านค่าตามดัชนีที่กำหนด |
บูลีนนามธรรม | เป็นแบบอ่านอย่างเดียว () บอกว่าบัฟเฟอร์นี้ได้รับการสนับสนุนโดยอาร์เรย์ที่สามารถเข้าถึงได้หรือไม่ |
บทคัดย่อ DataBuffer <T> | แคบ (ขนาดยาว) สร้างบัฟเฟอร์ใหม่ซึ่งมีเนื้อหาเป็นลำดับย่อยที่ใช้ร่วมกันของเนื้อหาของบัฟเฟอร์นี้ ซึ่งมีขนาดถูกกำหนดเป็นค่าที่กำหนด |
บทคัดย่อ DataBuffer <T> | ชดเชย (ดัชนียาว) สร้างบัฟเฟอร์ใหม่ซึ่งมีเนื้อหาเป็นลำดับย่อยที่ใช้ร่วมกันของเนื้อหาของบัฟเฟอร์นี้ โดยเริ่มต้นจากดัชนีที่กำหนด |
บทคัดย่อ DataBuffer <T> | อ่าน (T[] dst) อ่านการอ้างอิงของวัตถุในบัฟเฟอร์นี้ลงในอาร์เรย์ปลายทาง |
บทคัดย่อ DataBuffer <T> | อ่าน (T[] dst, int offset, int length) อ่านการอ้างอิงของวัตถุในบัฟเฟอร์นี้ลงในอาร์เรย์ปลายทาง |
บทคัดย่อ DataBuffer <T> | setObject (ค่า T, ดัชนีแบบยาว) เขียนค่าที่กำหนดลงในบัฟเฟอร์นี้ที่ดัชนีที่กำหนด |
ยาวเป็นนามธรรม | ขนาด () ขนาดของบัฟเฟอร์ในองค์ประกอบ |
บทคัดย่อ DataBuffer <T> | ชิ้น (ดัชนียาว, ขนาดยาว) สร้างบัฟเฟอร์ใหม่ที่มีเนื้อหาเป็นลำดับย่อยที่ใช้ร่วมกันของเนื้อหาของบัฟเฟอร์นี้ เริ่มต้นที่ดัชนีที่กำหนดและขนาดที่กำหนด |
นามธรรม DataBufferWindow <? ขยาย DataBuffer <T>> | หน้าต่าง (ขนาดยาว) สร้าง DataBufferWindow ที่ให้มุมมองบางส่วนของบัฟเฟอร์นี้ |
บทคัดย่อ DataBuffer <T> | เขียน (T[] src) เขียนการอ้างอิงของออบเจ็กต์ในอาร์เรย์ต้นทางลงในบัฟเฟอร์นี้ |
บทคัดย่อ DataBuffer <T> | เขียน (T[] src, int offset, int length) วิธี การใส่ จำนวนมากโดยใช้อาร์เรย์ int |
วิธีการสาธารณะ
บทคัดย่อสาธารณะ R ยอมรับ (ผู้เยี่ยมชม DataStorageVisitor <R>)
เยี่ยมชมพื้นที่เก็บข้อมูลสำรองของบัฟเฟอร์นี้
การใช้งานบัฟเฟอร์มีหน้าที่รับผิดชอบในการส่งคืนการอ้างอิงไปยังการจัดเก็บข้อมูลจริงไปยังผู้เยี่ยมชมที่ให้ไว้ ผู้เยี่ยมชมไม่จำเป็นต้องจัดการกับการจัดเก็บข้อมูลทุกประเภทที่เป็นไปได้ และสามารถแทนที่เฉพาะวิธีการจัดเก็บข้อมูลที่ตนสนใจจริงๆ เท่านั้น สำหรับพื้นที่จัดเก็บข้อมูลประเภทอื่น การเรียกนี้จะเป็นทางเลือกสำรองไปยัง fallback()
เพื่อให้ผู้เยี่ยมชมสามารถดำเนินการรูทีนทั่วไปบางอย่างได้หาก จำเป็น
พารามิเตอร์
ผู้เยี่ยมชม | เยี่ยมชมการจัดเก็บข้อมูลของบัฟเฟอร์นี้ |
---|
การส่งคืน
- ค่าเดียวกันที่ผู้เยี่ยมชมส่งคืน
DataBuffer นามธรรมสาธารณะ <T> copyTo ( DataBuffer <T> dst ขนาดยาว)
เขียนการอ้างอิงของออบเจ็กต์ในอาร์เรย์ต้นทางลงในบัฟเฟอร์นี้
หากมีค่าที่จะคัดลอกมากกว่าขนาดบัฟเฟอร์ปลายทาง เช่น size > dst.size()
จะไม่มีการถ่ายโอนค่าใด ๆ และ BufferOverflowException จะถูกส่งออกไป ในทางกลับกัน หากมีค่ามากกว่าที่จะคัดลอกขนาดบัฟเฟอร์ต้นทาง เช่น > src.size()
ดังนั้น BufferUnderfloatException จะถูกส่งออกไป
มิฉะนั้น วิธีการนี้จะคัดลอกค่า n = size
จากบัฟเฟอร์นี้ไปยังบัฟเฟอร์ปลายทาง
พารามิเตอร์
วันเวลา | บัฟเฟอร์ปลายทางที่จะคัดลอกค่า ต้องไม่ใช่บัฟเฟอร์นี้ |
---|---|
ขนาด | จำนวนค่าที่จะคัดลอกไปยังบัฟเฟอร์ปลายทาง |
การส่งคืน
- บัฟเฟอร์นี้
ขว้าง
ข้อยกเว้นอาร์กิวเมนต์ที่ผิดกฎหมาย | หากบัฟเฟอร์ปลายทางคือบัฟเฟอร์นี้ |
---|---|
ReadOnlyBufferException | หากบัฟเฟอร์ปลายทางเป็นแบบอ่านอย่างเดียว |
BufferOverflowException | หากมีพื้นที่ในบัฟเฟอร์ปลายทางไม่เพียงพอ |
บัฟเฟอร์ UnderflowException | หากมีค่าในบัฟเฟอร์ต้นทางไม่เพียงพอ |
บูลีนนามธรรมสาธารณะ เท่ากับ (Object obj)
ตรวจสอบความเท่าเทียมกันระหว่างบัฟเฟอร์ข้อมูล
บัฟเฟอร์ข้อมูลจะเท่ากับวัตถุอื่นถ้าวัตถุนี้เป็น 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 | ถ้าดัชนีเป็นลบหรือไม่เล็กกว่าขนาดบัฟเฟอร์ |
---|
บูลีนนามธรรมสาธารณะ คือReadOnly ()
บอกว่าบัฟเฟอร์นี้ได้รับการสนับสนุนโดยอาร์เรย์ที่สามารถเข้าถึงได้หรือไม่
การส่งคืน
- จริงหาก และเฉพาะในกรณีที่ บัฟเฟอร์นี้เป็นแบบอ่านอย่างเดียว
DataBuffer นามธรรมสาธารณะ <T> แคบ (ขนาดยาว)
สร้างบัฟเฟอร์ใหม่ซึ่งมีเนื้อหาเป็นลำดับย่อยที่ใช้ร่วมกันของเนื้อหาของบัฟเฟอร์นี้ ซึ่งมีขนาดถูกกำหนดเป็นค่าที่กำหนด
ขนาดใหม่ต้องไม่ใหญ่กว่าขนาดบัฟเฟอร์นี้ การเปลี่ยนแปลงเนื้อหาของบัฟเฟอร์นี้จะปรากฏในบัฟเฟอร์ใหม่และในทางกลับกัน บัฟเฟอร์ใหม่จะเป็นแบบอ่านอย่างเดียวก็ต่อเมื่อบัฟเฟอร์นี้เป็นแบบอ่านอย่างเดียวเท่านั้น
การโทรนี้เทียบเท่ากับ slice(0, size)
พารามิเตอร์
ขนาด | ขนาดของบัฟเฟอร์ใหม่นี้ |
---|
การส่งคืน
- บัฟเฟอร์ใหม่
ขว้าง
ข้อยกเว้นอาร์กิวเมนต์ที่ผิดกฎหมาย | หากค่าดัชนีและ/หรือขนาดไม่ผ่านการตรวจสอบความถูกต้อง |
---|
สาธารณะนามธรรม DataBuffer <T> ชดเชย (ดัชนีแบบยาว)
สร้างบัฟเฟอร์ใหม่ซึ่งมีเนื้อหาเป็นลำดับย่อยที่ใช้ร่วมกันของเนื้อหาของบัฟเฟอร์นี้ โดยเริ่มต้นจากดัชนีที่กำหนด
ดัชนีต้องไม่ใหญ่กว่าขนาดบัฟเฟอร์นี้ การเปลี่ยนแปลงเนื้อหาของบัฟเฟอร์นี้จะปรากฏในบัฟเฟอร์ใหม่และในทางกลับกัน บัฟเฟอร์ใหม่จะเป็นแบบอ่านอย่างเดียวก็ต่อเมื่อบัฟเฟอร์นี้เป็นแบบอ่านอย่างเดียวเท่านั้น
การโทรนี้เทียบเท่ากับ slice(index, size() - index)
พารามิเตอร์
ดัชนี | ดัชนีของค่าแรกของบัฟเฟอร์ใหม่ที่สร้างขึ้น ต้องไม่ใหญ่กว่า size() |
---|
การส่งคืน
- บัฟเฟอร์ใหม่
ขว้าง
ข้อยกเว้นอาร์กิวเมนต์ที่ผิดกฎหมาย | หากดัชนีไม่ผ่านการตรวจสอบความถูกต้อง |
---|
DataBuffer นามธรรมสาธารณะ <T> อ่าน (T[] dst)
อ่านการอ้างอิงของวัตถุในบัฟเฟอร์นี้ลงในอาร์เรย์ปลายทาง
วิธีนี้จะถ่ายโอนค่าจากบัฟเฟอร์นี้ไปยังอาร์เรย์ปลายทางที่กำหนด หากมีค่าในบัฟเฟอร์น้อยกว่าที่จำเป็นในการตอบสนองคำขอ นั่นคือ หาก dst.length > size()
จะไม่มีการถ่ายโอนค่าใด ๆ และ BufferUnderflowException จะถูกส่งออก
มิฉะนั้น วิธีการนี้จะคัดลอกค่า n = dst.length
จากบัฟเฟอร์นี้ไปยังอาร์เรย์ที่กำหนด
พารามิเตอร์
วันเวลา | อาร์เรย์ที่จะเขียนค่าลงไป |
---|
การส่งคืน
- บัฟเฟอร์นี้
ขว้าง
บัฟเฟอร์ UnderflowException | หากมีค่าไม่เพียงพอที่จะคัดลอกจากบัฟเฟอร์นี้ |
---|
DataBuffer นามธรรมสาธารณะ <T> อ่าน (T[] dst, int offset, int length)
อ่านการอ้างอิงของวัตถุในบัฟเฟอร์นี้ลงในอาร์เรย์ปลายทาง
วิธีนี้จะถ่ายโอนค่าจากบัฟเฟอร์นี้ไปยังอาร์เรย์ปลายทางที่กำหนด หากมีค่าในบัฟเฟอร์น้อยกว่าที่จำเป็นในการตอบสนองคำขอ นั่นคือ หาก length > size()
จะไม่มีการถ่ายโอนค่าใด ๆ และ BufferUnderflowException จะถูกส่งออกไป
มิฉะนั้น วิธีนี้จะคัดลอกค่า n = length
จากบัฟเฟอร์นี้ไปยังอาร์เรย์ที่กำหนดโดยเริ่มต้นที่ออฟเซ็ตที่กำหนด
พารามิเตอร์
วันเวลา | อาร์เรย์ที่จะเขียนค่าลงไป |
---|---|
ชดเชย | ออฟเซ็ตภายในอาร์เรย์ของค่าแรกที่จะเขียน ต้องไม่เป็นค่าลบและไม่ใหญ่กว่า dst.length |
ความยาว | จำนวนค่าสูงสุดที่จะเขียนลงในอาร์เรย์ที่กำหนด ต้องไม่เป็นค่าลบและไม่ใหญ่กว่า dst.length - offset |
การส่งคืน
- บัฟเฟอร์นี้
ขว้าง
บัฟเฟอร์ UnderflowException | หากมีค่าความยาวน้อยกว่าค่าที่เหลืออยู่ในบัฟเฟอร์นี้ |
---|---|
IndexOutOfBoundsException | หากเงื่อนไขเบื้องต้นของพารามิเตอร์ออฟเซ็ตและความยาวไม่คงอยู่ |
DataBuffer นามธรรมสาธารณะ <T> setObject (ค่า T, ดัชนีแบบยาว)
เขียนค่าที่กำหนดลงในบัฟเฟอร์นี้ที่ดัชนีที่กำหนด สิ่งสำคัญ: การใช้วิธีนี้ควรจำกัดไว้เฉพาะบัฟเฟอร์ประเภทที่ไม่ใช่แบบดั้งเดิม หรือเมื่อผู้เรียกไม่ได้กำหนดชนิดข้อมูลไว้ ในกรณีอื่น ๆ ให้เลือกใช้ตัวแปรดั้งเดิมซึ่งจะปรับปรุงประสิทธิภาพได้อย่างมาก (เช่น IntDataBuffer.setInt(idx)
พารามิเตอร์
ค่า | ค่าที่จะเขียน |
---|---|
ดัชนี | ดัชนีที่จะเขียนค่า |
การส่งคืน
- บัฟเฟอร์นี้
ขว้าง
IndexOutOfBoundsException | ถ้าดัชนีเป็นลบหรือไม่เล็กกว่าขนาดบัฟเฟอร์ |
---|---|
ReadOnlyBufferException | หากบัฟเฟอร์นี้เป็นแบบอ่านอย่างเดียว |
ขนาด ยาวนามธรรมสาธารณะ ()
ขนาดของบัฟเฟอร์ในองค์ประกอบ
ตัวอย่างเช่น ในกรณีของบัฟเฟอร์ไบต์ ค่านี้จะเท่ากับจำนวนไบต์ที่บัฟเฟอร์นี้สามารถเก็บได้ สำหรับบัฟเฟอร์จำนวนเต็ม จะเท่ากับจำนวนจำนวนเต็ม ดังนั้นขนาดเป็นไบต์ของบัฟเฟอร์นี้คือ size() * Integer.BYTES
การส่งคืน
- ขนาดบัฟเฟอร์
ชิ้น DataBuffer <T> นามธรรมสาธารณะ (ดัชนียาว, ขนาดยาว)
สร้างบัฟเฟอร์ใหม่ที่มีเนื้อหาเป็นลำดับย่อยที่ใช้ร่วมกันของเนื้อหาของบัฟเฟอร์นี้ เริ่มต้นที่ดัชนีที่กำหนดและขนาดที่กำหนด
ดัชนีบวกขนาดใหม่ต้องไม่ใหญ่กว่าขนาดบัฟเฟอร์นี้ การเปลี่ยนแปลงเนื้อหาของบัฟเฟอร์นี้จะปรากฏในบัฟเฟอร์ใหม่และในทางกลับกัน บัฟเฟอร์ใหม่จะเป็นแบบอ่านอย่างเดียวก็ต่อเมื่อบัฟเฟอร์นี้เป็นแบบอ่านอย่างเดียวเท่านั้น
พารามิเตอร์
ดัชนี | ดัชนีของค่าแรกของบัฟเฟอร์ใหม่ที่สร้างขึ้น |
---|---|
ขนาด | ขนาดของบัฟเฟอร์ใหม่นี้ต้องไม่ใหญ่กว่า size() |
การส่งคืน
- บัฟเฟอร์ใหม่
ขว้าง
ข้อยกเว้นอาร์กิวเมนต์ที่ผิดกฎหมาย | หากค่าขนาดไม่ผ่านการตรวจสอบความถูกต้อง |
---|
DataBufferWindow นามธรรมสาธารณะ <? ขยาย หน้าต่าง DataBuffer <T>> (ขนาดยาว)
สร้าง DataBufferWindow
ที่ให้มุมมองบางส่วนของบัฟเฟอร์นี้
หน้าต่างที่สร้างขึ้นมีขนาดคงที่และสามารถ "slide"
ไปตามบัฟเฟอร์นี้เพื่อให้มีมุมมองที่แตกต่างกันของข้อมูลโดยไม่ต้องจัดสรรอินสแตนซ์บัฟเฟอร์ใหม่ เช่นเดียวกับ offset(long)
ซึ่งช่วยปรับปรุงประสิทธิภาพโดยรวมเมื่อมีการทำซ้ำบ่อยครั้ง ตัวอย่างเช่น:
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 ของบัฟเฟอร์นี้
ขว้าง
ไม่รองรับ OperationException | หากบัฟเฟอร์ประเภทนี้ไม่รองรับหน้าต่างบัฟเฟอร์ |
---|
DataBuffer นามธรรมสาธารณะ <T> เขียน (T [] src)
เขียนการอ้างอิงของออบเจ็กต์ในอาร์เรย์ต้นทางลงในบัฟเฟอร์นี้
วิธีนี้จะถ่ายโอนค่าในอาร์เรย์ต้นทางที่กำหนดไปยังบัฟเฟอร์นี้ หากมีค่าในอาร์เรย์ต้นทางมากกว่าในบัฟเฟอร์นี้ กล่าวคือ หาก src.length > size()
จะไม่มีการถ่ายโอนค่าใด ๆ และ BufferOverflowException จะถูกส่งออกไป
มิฉะนั้น เมธอดนี้จะคัดลอกค่า n = src.length
จากอาร์เรย์ที่กำหนด
พารามิเตอร์
src | อาร์เรย์ต้นทางที่จะอ่านค่า |
---|
การส่งคืน
- บัฟเฟอร์นี้
ขว้าง
BufferOverflowException | หากมีพื้นที่ไม่เพียงพอในบัฟเฟอร์นี้สำหรับค่าในอาร์เรย์ต้นทาง |
---|---|
ReadOnlyBufferException | หากบัฟเฟอร์นี้เป็นแบบอ่านอย่างเดียว |
DataBuffer นามธรรมสาธารณะ <T> เขียน (T [] src, int offset, int length)
วิธี การใส่ จำนวนมากโดยใช้อาร์เรย์ int
วิธีนี้จะถ่ายโอนค่าในอาร์เรย์ต้นทางที่กำหนดไปยังบัฟเฟอร์นี้ หากมีค่าในอาร์เรย์ต้นทางมากกว่าในบัฟเฟอร์นี้ กล่าวคือ หาก length > size()
จะไม่มีการถ่ายโอนค่าใด ๆ และ BufferOverflowException จะถูกส่งออกไป
มิฉะนั้น เมธอดนี้จะคัดลอกค่า n = length
จากอาร์เรย์ที่กำหนดไปยังบัฟเฟอร์นี้ โดยเริ่มต้นที่ออฟเซ็ตที่กำหนด
พารามิเตอร์
src | อาร์เรย์ต้นทางที่จะอ่านค่า |
---|---|
ชดเชย | ออฟเซ็ตภายในอาร์เรย์ของค่าแรกที่จะอ่าน ต้องไม่เป็นค่าลบและไม่ใหญ่กว่า src.length |
ความยาว | จำนวนค่าที่จะอ่านจากอาร์เรย์ที่กำหนด ต้องไม่เป็นค่าลบและไม่ใหญ่กว่า src.length - offset |
การส่งคืน
- บัฟเฟอร์นี้
ขว้าง
BufferOverflowException | หากมีพื้นที่ไม่เพียงพอในบัฟเฟอร์นี้สำหรับค่าในอาร์เรย์ต้นทาง |
---|---|
IndexOutOfBoundsException | หากเงื่อนไขเบื้องต้นของพารามิเตอร์ออฟเซ็ตและความยาวไม่คงอยู่ |
ReadOnlyBufferException | หากบัฟเฟอร์นี้เป็นแบบอ่านอย่างเดียว |