DataBuffer

giao diện công cộng DataBuffer
Các lớp con gián tiếp đã biết

Một thùng chứa dữ liệu của một loại cụ thể.

Các phiên bản của DataBuffer ánh xạ các phân đoạn bộ nhớ gốc hoặc bộ nhớ heap thành dạng xem tuyến tính hỗ trợ:

  • Lập chỉ mục 64-bit, cho phép làm việc với bộ đệm lớn hơn 2 31 byte
  • Lưu trữ đối tượng thuộc bất kỳ loại nào và không chỉ nguyên thủy
  • Các loại chung cũng cho phép hoạt động trực tiếp với các loại được đóng hộp, không yêu cầu các loại bộ đệm rõ ràng như với bộ đệm JDK tiêu chuẩn.
Điều quan trọng cần lưu ý là không có gì đảm bảo bộ nhớ do DataBuffer quản lý là tuyến tính, đặc biệt khi xử lý các loại không nguyên thủy hoặc bộ đệm lớn.

Phương pháp công khai

trừu tượng <R> R
chấp nhận (khách truy cập DataStorageVisitor <R>)
Thăm bộ nhớ đệm của bộ đệm này.
Bộ đệm dữ liệu trừu tượng <T>
copyTo ( DataBuffer <T> dst, kích thước dài)
Viết các tham chiếu của các đối tượng trong mảng nguồn vào bộ đệm này.
trừu tượng boolean
bằng (Đối tượng obj)
Kiểm tra sự bình đẳng giữa các bộ đệm dữ liệu.
trừu tượng T
getObject (chỉ số dài)
Đọc giá trị tại chỉ mục đã cho.
trừu tượng boolean
isReadOnly ()
Cho biết bộ đệm này có được hỗ trợ bởi một mảng có thể truy cập hay không.
Bộ đệm dữ liệu trừu tượng <T>
hẹp (kích thước dài)
Tạo một bộ đệm mới có nội dung là một chuỗi con được chia sẻ của nội dung của bộ đệm này, có kích thước được đặt thành giá trị đã cho.
Bộ đệm dữ liệu trừu tượng <T>
bù đắp (chỉ số dài)
Tạo một bộ đệm mới có nội dung là một chuỗi con được chia sẻ của nội dung của bộ đệm này, bắt đầu từ chỉ mục đã cho.
Bộ đệm dữ liệu trừu tượng <T>
đọc (T[] dst)
Đọc các tham chiếu của các đối tượng trong bộ đệm này vào mảng đích.
Bộ đệm dữ liệu trừu tượng <T>
đọc (T[] dst, int offset, int length)
Đọc các tham chiếu của các đối tượng trong bộ đệm này vào mảng đích.
Bộ đệm dữ liệu trừu tượng <T>
setObject (giá trị T, chỉ mục dài)
Ghi giá trị đã cho vào bộ đệm này tại chỉ mục đã cho.
trừu tượng dài
kích cỡ ()
Kích thước của bộ đệm, tính theo phần tử.
Bộ đệm dữ liệu trừu tượng <T>
lát (chỉ số dài, kích thước dài)
Tạo một bộ đệm mới có nội dung là một chuỗi con được chia sẻ của nội dung của bộ đệm này, bắt đầu từ chỉ mục đã cho và có kích thước nhất định.
trừu tượng DataBufferWindow <? mở rộng DataBuffer <T>>
cửa sổ (kích thước dài)
Tạo DataBufferWindow cung cấp chế độ xem một phần bộ đệm này.
Bộ đệm dữ liệu trừu tượng <T>
viết (T[] src)
Viết các tham chiếu của các đối tượng trong mảng nguồn vào bộ đệm này.
Bộ đệm dữ liệu trừu tượng <T>
ghi (T[] src, int offset, int length)
Phương pháp đặt số lượng lớn, sử dụng mảng int.

Phương pháp công khai

chấp nhận R trừu tượng công khai ( DataStorageVisitor <R> khách truy cập)

Thăm bộ nhớ đệm của bộ đệm này.

Việc triển khai bộ đệm có trách nhiệm chuyển lại tham chiếu đến nơi lưu trữ dữ liệu thực tế cho khách truy cập được cung cấp. Khách truy cập không phải xử lý tất cả các loại lưu trữ dữ liệu có thể có và chỉ có thể ghi đè các phương thức lưu trữ mà họ thực sự quan tâm. Đối với bất kỳ loại lưu trữ nào khác, lệnh gọi này sẽ chuyển sang fallback() để khách truy cập có thể thực hiện một số quy trình chung nếu cần thiết.

Thông số
khách thăm quan thăm nơi lưu trữ dữ liệu của bộ đệm này
Trả lại
  • giá trị tương tự được khách truy cập trả về

Tóm tắt công khai DataBuffer <T> copyTo ( DataBuffer <T> dst, kích thước dài)

Viết các tham chiếu của các đối tượng trong mảng nguồn vào bộ đệm này.

Nếu có nhiều giá trị cần sao chép hơn kích thước bộ đệm đích, tức là size > dst.size() thì không có giá trị nào được chuyển và BufferOverflowException sẽ được ném ra. Mặt khác, nếu có nhiều giá trị hơn để sao chép kích thước bộ đệm nguồn đó, tức là > src.size() , thì BufferUnderfloatException sẽ được đưa ra.

Mặt khác, phương thức này sao chép các giá trị n = size từ bộ đệm này vào bộ đệm đích.

Thông số
dst bộ đệm đích nơi các giá trị được sao chép vào; không phải là bộ đệm này
kích cỡ số lượng giá trị để sao chép vào bộ đệm đích
Trả lại
  • bộ đệm này
Ném
Ngoại lệ Đối số bất hợp pháp nếu bộ đệm đích là bộ đệm này
ReadOnlyBufferNgoại lệ nếu bộ đệm đích ở chế độ chỉ đọc
BufferOverflowNgoại lệ nếu không có đủ dung lượng trong bộ đệm đích
Bộ đệmUnderflowNgoại lệ nếu không có đủ giá trị trong bộ đệm nguồn

boolean trừu tượng công khai bằng (Object obj)

Kiểm tra sự bình đẳng giữa các bộ đệm dữ liệu.

Một bộ đệm dữ liệu bằng một đối tượng khác nếu đối tượng này là một DataBuffer khác có cùng kích thước, loại và các phần tử bằng nhau và theo cùng thứ tự. Ví dụ:

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
 

Lưu ý rằng việc tính toán cần thiết để xác minh sự bằng nhau giữa hai bộ đệm có thể tốn kém trong một số trường hợp và do đó, bạn không nên sử dụng phương pháp này trong đường dẫn quan trọng nơi hiệu suất đóng vai trò quan trọng.

Thông số
vật thể đối tượng để so sánh bộ đệm này với
Trả lại
  • đúng nếu bộ đệm này bằng đối tượng được cung cấp

tóm tắt công khai T getObject (chỉ mục dài)

Đọc giá trị tại chỉ mục đã cho. Quan trọng: Việc sử dụng phương pháp này nên được giới hạn ở các bộ đệm thuộc loại không nguyên thủy hoặc khi kiểu dữ liệu không được người gọi xác định rõ ràng. Trong mọi trường hợp khác, hãy ưu tiên sử dụng biến thể nguyên thủy của nó để cải thiện đáng kể hiệu suất (ví dụ: IntDataBuffer.getInt(idx)

Thông số
mục lục chỉ mục mà từ đó float sẽ được đọc
Trả lại
  • giá trị tại chỉ số đã cho
Ném
IndexOutOfBoundsNgoại lệ nếu chỉ số âm hoặc không nhỏ hơn kích thước bộ đệm

boolean trừu tượng công khai isReadOnly ()

Cho biết bộ đệm này có được hỗ trợ bởi một mảng có thể truy cập hay không.

Trả lại
  • đúng khi và chỉ khi bộ đệm này ở chế độ chỉ đọc

DataBuffer trừu tượng công khai <T> hẹp (kích thước dài)

Tạo một bộ đệm mới có nội dung là một chuỗi con được chia sẻ của nội dung của bộ đệm này, có kích thước được đặt thành giá trị đã cho.

Kích thước mới không được lớn hơn kích thước bộ đệm này. Những thay đổi đối với nội dung của bộ đệm này sẽ hiển thị trong bộ đệm mới và ngược lại. Bộ đệm mới sẽ ở chế độ chỉ đọc khi và chỉ khi bộ đệm này ở chế độ chỉ đọc.

Cuộc gọi này tương đương với slice(0, size)

Thông số
kích cỡ kích thước của bộ đệm mới này
Trả lại
  • bộ đệm mới
Ném
Ngoại lệ Đối số bất hợp pháp nếu giá trị chỉ mục và/hoặc kích thước không vượt qua kiểm tra xác thực

phần bù DataBuffer <T> trừu tượng công khai (chỉ mục dài)

Tạo một bộ đệm mới có nội dung là một chuỗi con được chia sẻ của nội dung của bộ đệm này, bắt đầu từ chỉ mục đã cho.

Chỉ mục không được lớn hơn kích thước bộ đệm này. Những thay đổi đối với nội dung của bộ đệm này sẽ hiển thị trong bộ đệm mới và ngược lại. Bộ đệm mới sẽ ở chế độ chỉ đọc khi và chỉ khi bộ đệm này ở chế độ chỉ đọc.

Cuộc gọi này tương đương với slice(index, size() - index)

Thông số
mục lục chỉ mục của giá trị đầu tiên của bộ đệm mới được tạo, không được lớn hơn size()
Trả lại
  • bộ đệm mới
Ném
Ngoại lệ Đối số bất hợp pháp nếu chỉ mục không vượt qua kiểm tra xác nhận

Bộ đệm dữ liệu trừu tượng công khai <T> đã đọc (T[] dst)

Đọc các tham chiếu của các đối tượng trong bộ đệm này vào mảng đích.

Phương thức này chuyển các giá trị từ bộ đệm này vào mảng đích đã cho. Nếu có ít giá trị trong bộ đệm hơn mức cần thiết để đáp ứng yêu cầu, tức là nếu dst.length > size() thì không có giá trị nào được chuyển và BufferUnderflowException sẽ được ném ra.

Mặt khác, phương thức này sao chép các giá trị n = dst.length từ bộ đệm này vào mảng đã cho.

Thông số
dst mảng mà các giá trị sẽ được ghi vào
Trả lại
  • bộ đệm này
Ném
Bộ đệmUnderflowNgoại lệ nếu không có đủ giá trị để sao chép từ bộ đệm này

Tóm tắt công khai DataBuffer <T> đọc (T[] dst, int offset, int length)

Đọc các tham chiếu của các đối tượng trong bộ đệm này vào mảng đích.

Phương thức này chuyển các giá trị từ bộ đệm này vào mảng đích đã cho. Nếu có ít giá trị trong bộ đệm hơn mức cần thiết để đáp ứng yêu cầu, tức là nếu length > size() thì không có giá trị nào được chuyển và BufferUnderflowException sẽ được ném ra.

Mặt khác, phương thức này sao chép các giá trị n = length từ bộ đệm này vào mảng đã cho bắt đầu từ offset đã cho.

Thông số
dst mảng mà các giá trị sẽ được ghi vào
bù lại phần bù trong mảng của giá trị đầu tiên được ghi; phải không âm và không lớn hơn dst.length
chiều dài số lượng giá trị tối đa được ghi vào mảng đã cho; phải không âm và không lớn hơn dst.length - offset
Trả lại
  • bộ đệm này
Ném
Bộ đệmUnderflowNgoại lệ nếu có ít hơn giá trị độ dài còn lại trong bộ đệm này
IndexOutOfBoundsNgoại lệ nếu các điều kiện tiên quyết trên tham số offset và độ dài không giữ được

Tóm tắt công khai DataBuffer <T> setObject (giá trị T, chỉ mục dài)

Ghi giá trị đã cho vào bộ đệm này tại chỉ mục đã cho. Quan trọng: Việc sử dụng phương pháp này nên được giới hạn ở các bộ đệm thuộc loại không nguyên thủy hoặc khi kiểu dữ liệu không được người gọi xác định rõ ràng. Trong mọi trường hợp khác, hãy ưu tiên sử dụng biến thể nguyên thủy của nó để cải thiện đáng kể hiệu suất (ví dụ: IntDataBuffer.setInt(idx)

Thông số
giá trị giá trị cần viết
mục lục chỉ số tại đó giá trị sẽ được viết
Trả lại
  • bộ đệm này
Ném
IndexOutOfBoundsNgoại lệ nếu chỉ số âm hoặc không nhỏ hơn kích thước bộ đệm
ReadOnlyBufferNgoại lệ nếu bộ đệm này ở chế độ chỉ đọc

kích thước dài trừu tượng công khai ()

Kích thước của bộ đệm, tính theo phần tử.

Ví dụ: trong trường hợp bộ đệm byte, giá trị này bằng số byte mà bộ đệm này có thể chứa. Đối với bộ đệm số nguyên, nó bằng số lượng số nguyên, do đó kích thước tính bằng byte của bộ đệm này là size() * Integer.BYTES .

Trả lại
  • kích thước bộ đệm

lát cắt DataBuffer <T> trừu tượng công khai (chỉ mục dài, kích thước dài)

Tạo một bộ đệm mới có nội dung là một chuỗi con được chia sẻ của nội dung của bộ đệm này, bắt đầu từ chỉ mục đã cho và có kích thước nhất định.

Chỉ số cộng với kích thước mới không được lớn hơn kích thước bộ đệm này. Những thay đổi đối với nội dung của bộ đệm này sẽ hiển thị trong bộ đệm mới và ngược lại. Bộ đệm mới sẽ ở chế độ chỉ đọc khi và chỉ khi bộ đệm này ở chế độ chỉ đọc.

Thông số
mục lục chỉ mục của giá trị đầu tiên của bộ đệm mới được tạo
kích cỡ kích thước của bộ đệm mới này không được lớn hơn size()
Trả lại
  • bộ đệm mới
Ném
Ngoại lệ Đối số bất hợp pháp nếu giá trị kích thước không vượt qua kiểm tra xác thực

Tóm tắt công khai DataBufferWindow <? mở rộng cửa sổ DataBuffer <T>> (kích thước dài)

Tạo DataBufferWindow cung cấp chế độ xem một phần bộ đệm này.

Cửa sổ được tạo có kích thước cố định và có thể "slide" dọc theo bộ đệm này để cung cấp các chế độ xem dữ liệu khác nhau mà không cần phân bổ phiên bản bộ đệm mới, giống như offset(long) . Điều này cải thiện hiệu suất tổng thể khi thao tác này được lặp lại thường xuyên. Ví dụ:

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;
     
 }
 }

Đối tượng được trả về có trạng thái và không an toàn theo luồng.

Thông số
kích cỡ kích thước của cửa sổ
Trả lại
  • một cửa sổ mới bắt đầu ở chỉ số 0 của bộ đệm này
Ném
Ngoại lệ hoạt động không được hỗ trợ nếu loại bộ đệm này không hỗ trợ các cửa sổ bộ đệm

Tóm tắt công khai DataBuffer <T> ghi (T[] src)

Viết các tham chiếu của các đối tượng trong mảng nguồn vào bộ đệm này.

Phương thức này chuyển các giá trị trong mảng nguồn đã cho vào bộ đệm này. Nếu có nhiều giá trị trong mảng nguồn hơn trong bộ đệm này, tức là nếu src.length > size() thì không có giá trị nào được chuyển và BufferOverflowException sẽ được ném ra.

Mặt khác, phương thức này sao chép các giá trị n = src.length từ mảng đã cho.

Thông số
src mảng nguồn mà từ đó các giá trị sẽ được đọc
Trả lại
  • bộ đệm này
Ném
BufferOverflowNgoại lệ nếu không có đủ không gian trong bộ đệm này cho các giá trị trong mảng nguồn
ReadOnlyBufferNgoại lệ nếu bộ đệm này ở chế độ chỉ đọc

Tóm tắt công khai DataBuffer <T> ghi (T[] src, int offset, int length)

Phương pháp đặt số lượng lớn, sử dụng mảng int.

Phương thức này chuyển các giá trị trong mảng nguồn đã cho vào bộ đệm này. Nếu có nhiều giá trị trong mảng nguồn hơn trong bộ đệm này, tức là nếu length > size() thì không có giá trị nào được chuyển và BufferOverflowException sẽ được ném ra.

Mặt khác, phương thức này sao chép các giá trị n = length từ mảng đã cho vào bộ đệm này, bắt đầu từ offset đã cho.

Thông số
src mảng nguồn mà từ đó các giá trị sẽ được đọc
bù lại phần bù trong mảng của giá trị đầu tiên được đọc; phải không âm và không lớn hơn src.length
chiều dài số lượng giá trị được đọc từ mảng đã cho; phải không âm và không lớn hơn src.length - offset
Trả lại
  • bộ đệm này
Ném
BufferOverflowNgoại lệ nếu không có đủ không gian trong bộ đệm này cho các giá trị trong mảng nguồn
IndexOutOfBoundsNgoại lệ nếu các điều kiện tiên quyết trên tham số offset và độ dài không giữ được
ReadOnlyBufferNgoại lệ nếu bộ đệm này ở chế độ chỉ đọc