DataLayout

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

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 giá trị long thành BigInteger ,

 @Override
 public BigInteger readObject(LongDataBuffer buffer, long index) {
   return BigInteger.valueOf(buffer.getLong(index));
 }
 
Nếu một giá trị người dùng chia tỷ lệ trên nhiều giá trị bộ đệm, index sẽ cho biết vị trí bắt đầu của chuỗi sẽ được đọc từ bộ đệm.

Thông số
đệm bộ đệm để đọc từ
mục lụ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 giá trị long ,

 @Override
 public void writeObject(LongDataBuffer buffer, BigInteger value, long index) {
   buffer.setLong(value.longValue(), index);
 }
 
Nếu một giá trị người dùng chia tỷ lệ trên nhiều giá trị bộ đệm, 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
mục lục chỉ mục trong bộ đệm nơi giá trị được chuyển đổi sẽ được ghi