DataLayout

공개 인터페이스 DataLayout
알려진 간접 하위 클래스

버퍼에 저장된 데이터를 지정된 유형으로 변환합니다.

DataLayout 인스턴스는 DataBuffer 의 데이터를 저장하고 읽기 위한 사용자 정의 형식을 정의하는 데 사용됩니다. 이는 버퍼에 저장된 데이터 유형( 버퍼 유형)과 최종 사용자가 조작하는 데이터 유형( 사용자 유형) 사이에 분리 계층을 제공합니다.

쓰거나 읽는 모든 값에 대해 변환 메서드가 호출되므로 데이터 레이아웃 작업은 성능에 부정적인 영향을 미칠 수 있으므로 가능하면 기본 유형을 직접 사용하는 것이 좋습니다.

또한 각 버퍼에 대해 새 인스턴스를 재할당하지 않고도 여러 버퍼에 다시 적용할 수 있도록 불변 데이터 레이아웃을 구현하는 것이 좋습니다. 예:

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

공개 방법

추상 데이터 버퍼 <T>
ApplyTo (S 버퍼)
제공된 버퍼에 이 레이아웃을 적용합니다.
추상 T
readObject (S 버퍼, 긴 인덱스)
지정된 인덱스의 버퍼에서 n = scale() 값을 읽고 이를 사용자 유형의 단일 값으로 반환합니다.
추상 정수
규모 ()
단일 사용자 값을 나타내기 위해 필요한 버퍼 값의 수를 나타냅니다. 기본값은 1입니다.
추상적인 공백
writeObject (S 버퍼, T 값, 긴 인덱스)
사용자 값을 버퍼 유형으로 변환한 후 지정된 인덱스의 버퍼에 씁니다.

공개 방법

공개 추상 DataBuffer <T> applyTo (S 버퍼)

제공된 버퍼에 이 레이아웃을 적용합니다.

반환된 DataBuffer 인스턴스는 단순히 원래 버퍼에 대한 래퍼일 뿐이며 자체 백업 저장소가 없습니다.

매개변수
완충기 이 레이아웃을 적용할 대상 버퍼
보고
  • 이 레이아웃의 버퍼

공개 추상 T readObject (S 버퍼, 긴 인덱스)

지정된 인덱스의 버퍼에서 n = scale() 값을 읽고 이를 사용자 유형의 단일 값으로 반환합니다.

가장 적절한 방법을 사용하여 주어진 버퍼에서 변환할 값을 읽는 것은 이 인터페이스 구현자의 책임입니다. 예를 들어 단일 long BigInteger 로 변환하는 레이아웃의 경우

 @Override
 public BigInteger readObject(LongDataBuffer buffer, long index) {
   return BigInteger.valueOf(buffer.getLong(index));
 }
 
단일 사용자 값이 둘 이상의 버퍼 값으로 확장되는 경우 index 버퍼에서 읽을 시퀀스의 시작 위치를 나타냅니다.

매개변수
완충기 읽을 버퍼
색인 버퍼에서 읽을 버퍼의 위치
보고
  • 변환된 값

공개 추상 정수 스케일 ()

단일 사용자 값을 나타내기 위해 필요한 버퍼 값의 수를 나타냅니다. 기본값은 1입니다.

Scale은 양수이고 정수여야 합니다. 즉, 버퍼의 단일 버퍼 값을 사용하여 둘 이상의 사용자 값을 나타낼 수 없습니다.

공공 추상 무효 writeObject (S 버퍼, T 값, 긴 인덱스)

사용자 값을 버퍼 유형으로 변환한 후 지정된 인덱스의 버퍼에 씁니다.

이 호출이 반환되기 전에 가장 적절한 방법을 사용하여 변환된 값을 지정된 버퍼에 쓰는 것은 이 인터페이스 구현자의 책임입니다. 예를 들어 BigInteger 를 단일 long 으로 변환하는 레이아웃의 경우

 @Override
 public void writeObject(LongDataBuffer buffer, BigInteger value, long index) {
   buffer.setLong(value.longValue(), index);
 }
 
단일 사용자 값이 둘 이상의 버퍼 값으로 확장되는 경우 index 버퍼에 기록될 시퀀스의 시작 위치를 나타냅니다.

매개변수
완충기 쓸 버퍼
변환하고 쓸 사용자 유형의 값
색인 변환된 값을 써야 하는 버퍼의 인덱스