Các lớp con gián tiếp đã biết Bfloat16Layout , BoolLayout , BooleanDataLayout <S mở rộng DataBuffer <?>>, ByteDataLayout <S mở rộng DataBuffer <?>>, DoubleDataLayout <S mở rộng DataBuffer <?>>, Float16Layout , FloatDataLayout <S mở rộng DataBuffer <?>>, IntDataLayout <S mở rộng DataBuffer <?>>, LongDataLayout <S mở rộng DataBuffer <?>>, ShortDataLayout <S mở rộng DataBuffer <?>>, StringLayout |
Chuyển đổi dữ liệu được lưu trữ trong bộ đệm sang một loại nhất định.
Các phiên bản DataLayout
được sử dụng để xác định định dạng tùy chỉnh để lưu trữ và đọc dữ liệu của DataBuffer
. Chúng cung cấp một lớp phân tách giữa loại dữ liệu được lưu trữ trong bộ đệm (loại bộ đệm ) và loại dữ liệu do người dùng cuối (loại người dùng ) thao tác.
Vì các phương thức chuyển đổi được gọi cho mọi giá trị được ghi hoặc đọc nên việc làm việc với bố cục dữ liệu có thể có tác động tiêu cực đến hiệu suất, vì vậy, nên ưu tiên sử dụng trực tiếp các kiểu nguyên thủy bất cứ khi nào có thể.
Bạn cũng nên triển khai bố cục dữ liệu không thể thay đổi để có thể áp dụng lại chúng cho nhiều bộ đệm mà không cần phân bổ lại phiên bản mới cho mỗi bộ đệm. Ví dụ:
class BigIntegerBufferAllocator { public DataBuffer<BigInteger> allocate(long size) { return LAYOUT.applyTo(DataBuffers.ofLongs(size * LAYOUT.scale())); // scale is 1 by default } private static final DataLayout<LongDataBuffer, BigInteger> LAYOUT = new DataLayout<LongDataBuffer, BigInteger>() { @Override public void writeObject(LongDataBuffer buffer, BigInteger value, long index) { buffer.setLong(value.longValue(), index); } @Override public BigInteger readObject(LongDataBuffer buffer, long index) { return BigInteger.valueOf(buffer.getLong(index)); } }; }
Phương pháp công khai
Bộ đệm dữ liệu trừu tượng <T> | áp dụngTo (bộ đệm S) Áp dụng bố cục này cho bộ đệm được cung cấp. |
trừu tượng T | readObject (Bộ đệm S, chỉ mục dài) Đọc các giá trị n = scale() từ bộ đệm tại chỉ mục đã cho và trả về chúng dưới dạng một giá trị duy nhất trong kiểu người dùng. |
int trừu tượng | tỉ lệ () Cho biết số lượng giá trị bộ đệm được yêu cầu để thể hiện một giá trị người dùng, mặc định là 1. |
khoảng trống trừu tượng | writeObject (Bộ đệm S, giá trị T, chỉ mục dài) Ghi một giá trị người dùng vào bộ đệm tại chỉ mục đã cho sau khi chuyển đổi nó thành loại bộ đệm. |
Phương pháp công khai
DataBuffer trừu tượng công khai <T> applyTo (bộ đệm S)
Áp dụng bố cục này cho bộ đệm được cung cấp.
Phiên bản DataBuffer
được trả về chỉ đơn giản là một trình bao bọc cho bộ đệm ban đầu và không có bộ lưu trữ dự phòng của riêng nó.
Thông số
đệm | bộ đệm đích để áp dụng bố cục này cho |
---|
Trả lại
- một bộ đệm với cách bố trí này
tóm tắt công khai T readObject (bộ đệm S, chỉ mục dài)
Đọc các giá trị n = scale()
từ bộ đệm tại chỉ mục đã cho và trả về chúng dưới dạng một giá trị duy nhất trong kiểu người dùng.
Những người triển khai giao diện này có trách nhiệm đọc giá trị được chuyển đổi từ bộ đệm nhất định, sử dụng phương pháp thích hợp nhất. Ví dụ: đối với bố cục chuyển đổi một long
thành BigInteger
,
@Override public BigInteger readObject(LongDataBuffer buffer, long index) { return BigInteger.valueOf(buffer.getLong(index)); }
index
sẽ cho biết vị trí bắt đầu của chuỗi được đọc từ bộ đệm. Thông số
đệm | bộ đệm để đọc từ |
---|---|
chỉ mục | vị trí của bộ đệm để đọc trong bộ đệm |
Trả lại
- giá trị được chuyển đổi
tỷ lệ int trừu tượng công khai ()
Cho biết số lượng giá trị bộ đệm được yêu cầu để thể hiện một giá trị người dùng, mặc định là 1.
Tỷ lệ phải dương và phải là số nguyên, nghĩa là không thể sử dụng một giá trị bộ đệm trong bộ đệm để biểu thị nhiều hơn một giá trị người dùng.
trừu tượng công khai void writeObject (Bộ đệm S, giá trị T, chỉ mục dài)
Ghi một giá trị người dùng vào bộ đệm tại chỉ mục đã cho sau khi chuyển đổi nó thành loại bộ đệm.
Những người triển khai giao diện này có trách nhiệm ghi giá trị đã chuyển đổi vào bộ đệm đã cho trước khi lệnh gọi này trả về bằng phương pháp thích hợp nhất. Ví dụ: đối với bố cục chuyển đổi BigInteger
thành một long
,
@Override public void writeObject(LongDataBuffer buffer, BigInteger value, long index) { buffer.setLong(value.longValue(), index); }
index
sẽ cho biết vị trí bắt đầu của chuỗi được ghi vào bộ đệm. Thông số
đệm | bộ đệm để ghi vào |
---|---|
giá trị | giá trị trong loại người dùng để chuyển đổi và viết |
chỉ mục | chỉ mục trong bộ đệm nơi giá trị được chuyển đổi sẽ được ghi |