DataBuffer

DataBuffer อินเทอร์เฟซสาธารณะ
คลาสย่อยทางอ้อมที่รู้จัก

ที่เก็บข้อมูลประเภทเฉพาะ

อินสแตนซ์ของ DataBuffer จะแมปเซ็กเมนต์หน่วยความจำดั้งเดิมหรือฮีปเป็นมุมมองเชิงเส้นที่รองรับ:

  • การทำดัชนีแบบ 64 บิต ทำให้สามารถทำงานกับบัฟเฟอร์ที่มีขนาดใหญ่กว่า 2 31 ไบต์ได้
  • การจัดเก็บวัตถุทุกประเภทและไม่ใช่เฉพาะวัตถุดั้งเดิมเท่านั้น
  • ประเภททั่วไปอนุญาตให้ทำงานโดยตรงกับประเภทชนิดบรรจุกล่องเช่นกัน ซึ่งไม่ต้องการประเภทบัฟเฟอร์ที่ชัดเจนเหมือนกับบัฟเฟอร์ JDK มาตรฐาน
สิ่งสำคัญคือต้องทราบว่าไม่มีการรับประกันว่าหน่วยความจำที่จัดการโดย DataBuffer จะเป็นแบบเส้นตรง โดยเฉพาะอย่างยิ่งเมื่อต้องจัดการกับประเภทที่ไม่ใช่แบบดั้งเดิมหรือบัฟเฟอร์ขนาดใหญ่

วิธีการสาธารณะ

นามธรรม <R> อาร์
ยอมรับ (ผู้เยี่ยมชม DataStorageVisitor <R>)
เยี่ยมชมพื้นที่เก็บข้อมูลสำรองของบัฟเฟอร์นี้
บทคัดย่อ DataBuffer <T>
copyTo ( DataBuffer <T> dst ขนาดยาว)
เขียนการอ้างอิงของออบเจ็กต์ในอาร์เรย์ต้นทางลงในบัฟเฟอร์นี้
บูลีนนามธรรม
เท่ากับ (วัตถุ 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 หากบัฟเฟอร์นี้เป็นแบบอ่านอย่างเดียว