คลาสย่อยทางอ้อมที่รู้จัก AbstractDataBufferWindow <B ขยาย DataBuffer <?>> |
คอนเทนเนอร์ที่ไม่แน่นอนสำหรับการดูส่วนหนึ่งของ DataBuffer
หน้าต่างบัฟเฟอร์ข้อมูลมีขนาดคงที่และสามารถ "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;
}
}
อินสแตนซ์ DataBufferWindow
มีสถานะและไม่ปลอดภัยสำหรับเธรด
วิธีการสาธารณะ
นามธรรมบี | บัฟเฟอร์ () ส่งกลับบัฟเฟอร์ที่สนับสนุนหน้าต่างนี้ |
ยาวเป็นนามธรรม | ชดเชย () ส่งกลับค่าชดเชยปัจจุบันของหน้าต่างนี้ในบัฟเฟอร์เดิม |
ยาวเป็นนามธรรม | ขนาด () ส่งกลับขนาดของหน้าต่างบัฟเฟอร์นี้ |
บทคัดย่อ DataBufferWindow <B> | สไลด์ (ก้าวยาว) ย้ายหน้าต่างขององค์ประกอบ step ในบัฟเฟอร์เดิม |
บทคัดย่อ DataBufferWindow <B> | slideTo (ดัชนียาว) ย้ายหน้าต่างไปยังตำแหน่งที่กำหนดในบัฟเฟอร์เดิม |
วิธีการสาธารณะ
บัฟเฟอร์ B บทคัดย่อสาธารณะ ()
ส่งกลับบัฟเฟอร์ที่สนับสนุนหน้าต่างนี้
แต่ละอินสแตนซ์ของหน้าต่างมีบัฟเฟอร์ของตัวเองเพื่อให้ดู DataBuffer
ดั้งเดิมได้ บัฟเฟอร์จะกลายพันธุ์เมื่อหน้าต่างเลื่อนไปที่ออฟเซ็ตที่แตกต่างกัน ตัวอย่างเช่น:
IntDataBuffer buffer = DataBuffers.of(0, 1, 2, 3);
DataBufferWindow<IntDataBuffer> window = buffer.window(0, 2);
IntDataBuffer windowBuffer = window.buffer();
assertEquals(0, windowBuffer.getInt(0));
assertEquals(1, windowBuffer.getInt(1));
window.slideTo(2);
assertEquals(2, windowBuffer.getInt(0));
assertEquals(3, windowBuffer.getInt(1));
assertSame(windowBuffer, window.buffer());
การส่งคืน
- บัฟเฟอร์ของหน้าต่างนี้
ออฟเซ็ต ยาวนามธรรมสาธารณะ ()
ส่งกลับค่าชดเชยปัจจุบันของหน้าต่างนี้ในบัฟเฟอร์เดิม
ขนาด ยาวนามธรรมสาธารณะ ()
ส่งกลับขนาดของหน้าต่างบัฟเฟอร์นี้
สไลด์ DataBufferWindow นามธรรมสาธารณะ <B> (ขั้นตอนยาว)
ย้ายหน้าต่างขององค์ประกอบ step
ในบัฟเฟอร์เดิม
ขนาดของหน้าต่างยังคงเท่าเดิมและออฟเซ็ตของมันถูกตั้งค่าเป็น offset() + step
หาก step
เป็นบวก หน้าต่างจะเลื่อนไปข้างหน้า หากเป็นลบก็จะเลื่อนถอยหลัง
พารามิเตอร์
ขั้นตอน | ค่าที่จะเพิ่มให้กับออฟเซ็ตปัจจุบันของหน้าต่างนี้ |
---|
การส่งคืน
- อินสแตนซ์นี้
ขว้าง
IndexOutOfBoundsException | หากไม่สามารถเลื่อนหน้าต่างได้เนื่องจากเกินขีดจำกัดบัฟเฟอร์เดิม |
---|
สาธารณะบทคัดย่อ DataBufferWindow <B> slideTo (ดัชนียาว)
ย้ายหน้าต่างไปยังตำแหน่งที่กำหนดในบัฟเฟอร์เดิม
ขนาดของหน้าต่างยังคงเท่าเดิมและออฟเซ็ตถูกตั้งค่าเป็น index
ดังนั้นการเข้าถึงค่าของ buffer()
ที่ดัชนี x
จะส่งกลับค่าที่ index + x
ในบัฟเฟอร์ดั้งเดิม
พารามิเตอร์
ดัชนี | ออฟเซ็ตใหม่สำหรับหน้าต่างนี้ |
---|
การส่งคืน
- อินสแตนซ์นี้
ขว้าง
IndexOutOfBoundsException | หากไม่สามารถเลื่อนหน้าต่างได้เนื่องจากเกินขีดจำกัดบัฟเฟอร์เดิม |
---|