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.
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 | |
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ỉ số 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ố
du khách | thăm nơi lưu trữ dữ liệu của bộ đệm này |
---|
Trả lại
- cùng một giá trị đượ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
Đối số bất hợp phápNgoại lệ | 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ố
chỉ mụ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
Đối số bất hợp phápNgoại lệ | 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ố
chỉ mụ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
Đối số bất hợp phápNgoại lệ | 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 |
---|---|
chỉ mục | chỉ mục 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ố
chỉ mụ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
Đối số bất hợp phápNgoại lệ | 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ần đọ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 |