알려진 간접 하위 클래스 |
특정 유형의 데이터가 담긴 컨테이너입니다.
DataBuffer
인스턴스는 기본 또는 힙 메모리 세그먼트를 다음을 지원하는 선형 보기에 매핑합니다.
- 64비트 인덱싱, 2 31 바이트보다 큰 버퍼 작업 가능
- 프리미티브뿐만 아니라 모든 유형의 객체 저장
- 일반 유형을 사용하면 표준 JDK 버퍼처럼 명시적인 버퍼 유형이 필요하지 않은 박스형 유형에서도 직접 작업할 수 있습니다.
DataBuffer
에 의해 관리되는 메모리가 선형이라는 보장은 없다는 점에 유의하는 것이 중요합니다. 특히 기본이 아닌 유형이나 대규모 버퍼를 처리할 때 더욱 그렇습니다. 공개 방법
추상 <R> R | |
추상 데이터 버퍼 <T> | |
추상 부울 | 같음 (객체 객체) 데이터 버퍼 간의 동등성을 확인합니다. |
추상 T | getObject (긴 인덱스) 지정된 인덱스의 값을 읽습니다. |
추상 부울 | isReadOnly () 이 버퍼가 액세스 가능한 배열에 의해 지원되는지 여부를 알려줍니다. |
추상 데이터 버퍼 <T> | 좁은 (긴 사이즈) 내용이 이 버퍼 내용의 공유 하위 시퀀스이고 크기가 지정된 값으로 설정된 새 버퍼를 만듭니다. |
추상 데이터 버퍼 <T> | 오프셋 (긴 인덱스) 지정된 인덱스에서 시작하여 이 버퍼 내용의 공유 하위 시퀀스를 내용으로 하는 새 버퍼를 만듭니다. |
추상 데이터 버퍼 <T> | 읽기 (T[] dst) 이 버퍼에 있는 개체의 참조를 대상 배열로 읽어옵니다. |
추상 데이터 버퍼 <T> | 읽기 (T[] dst, int 오프셋, int 길이) 이 버퍼에 있는 개체의 참조를 대상 배열로 읽어옵니다. |
추상 데이터 버퍼 <T> | setObject (T 값, 긴 인덱스) 주어진 값을 이 버퍼의 지정된 인덱스에 씁니다. |
추상적인 긴 | 사이즈 () 요소 단위의 버퍼 크기입니다. |
추상 데이터 버퍼 <T> | 슬라이스 (긴 인덱스, 긴 크기) 지정된 인덱스에서 시작하여 지정된 크기로 이 버퍼 내용의 공유 하위 시퀀스를 내용으로 하는 새 버퍼를 만듭니다. |
추상 DataBufferWindow <? DataBuffer <T>> 확장 | 창 (긴 크기) 이 버퍼의 부분 보기를 제공하는 DataBufferWindow 만듭니다. |
추상 데이터 버퍼 <T> | 쓰기 (T[] src) 소스 배열의 객체 참조를 이 버퍼에 씁니다. |
추상 데이터 버퍼 <T> | 쓰기 (T[] src, int 오프셋, int 길이) int 배열을 사용하는 대량 넣기 방법. |
공개 방법
공개 추상 R 승인 ( DataStorageVisitor <R> 방문자)
이 버퍼의 백업 저장소를 방문합니다.
버퍼 구현은 제공된 방문자에게 실제 데이터 저장소에 대한 참조를 다시 전달하는 역할을 합니다. 방문자는 가능한 모든 유형의 데이터 저장소를 처리할 필요가 없으며 실제로 관심 있는 저장소에 대한 메소드만 재정의할 수 있습니다. 다른 유형의 저장소의 경우 이 호출은 fallback()
으로 대체되므로 방문자는 다음과 같은 경우 일부 일반 루틴을 실행할 수 있습니다. 필요합니다.
매개변수
방문객 | 이 버퍼의 데이터 저장소를 방문합니다. |
---|
보고
- 방문자가 반환한 동일한 값
공개 추상 DataBuffer <T> copyTo ( DataBuffer <T> dst, 긴 크기)
소스 배열의 객체 참조를 이 버퍼에 씁니다.
대상 버퍼 크기보다 복사할 값이 더 많은 경우(예: size > dst.size()
값이 전송되지 않고 BufferOverflowException이 발생합니다. 반면, 소스 버퍼 크기보다 복사할 값이 더 많으면(예 > src.size()
BufferUnderfloatException이 발생합니다.
그렇지 않은 경우 이 메서드는 이 버퍼에서 n = size
값을 대상 버퍼로 복사합니다.
매개변수
일광 | 값이 복사되는 대상 버퍼입니다. 이 버퍼가 아니어야 합니다. |
---|---|
크기 | 대상 버퍼에 복사할 값의 수 |
보고
- 이 버퍼
던지기
IllegalArgumentException | 대상 버퍼가 이 버퍼인 경우 |
---|---|
ReadOnlyBufferException | 대상 버퍼가 읽기 전용인 경우 |
버퍼오버플로우예외 | 대상 버퍼에 공간이 충분하지 않은 경우 |
BufferUnderflowException | 소스 버퍼에 값이 충분하지 않은 경우 |
공개 추상 부울은 (객체 obj) 와 같습니다 .
데이터 버퍼 간의 동등성을 확인합니다.
이 객체가 동일한 크기, 유형의 또 다른 DataBuffer
이고 요소가 동일하고 동일한 순서인 경우 데이터 버퍼는 다른 객체와 동일합니다. 예를 들어:
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
두 버퍼 간의 동등성을 확인하는 데 필요한 계산은 경우에 따라 비용이 많이 들 수 있으므로 성능이 중요한 중요한 경로에서는 이 방법을 사용하지 않는 것이 좋습니다.
매개변수
객체 | 이 버퍼를 비교할 객체 |
---|
보고
- 이 버퍼가 제공된 객체와 같으면 true
공개 추상 T getObject (긴 인덱스)
지정된 인덱스의 값을 읽습니다. 중요: 이 메서드의 사용은 기본이 아닌 유형의 버퍼 또는 호출자가 데이터 유형을 결정적으로 알 수 없는 경우로 제한되어야 합니다. 다른 경우에는 성능을 크게 향상시키는 기본 변형(예: IntDataBuffer.getInt(idx)
을 사용하는 것이 좋습니다.
매개변수
색인 | float를 읽을 인덱스 |
---|
보고
- 주어진 인덱스의 값
던지기
IndexOutOfBoundsException | 인덱스가 음수이거나 버퍼 크기보다 작지 않은 경우 |
---|
공개 추상 부울 isReadOnly ()
이 버퍼가 액세스 가능한 배열에 의해 지원되는지 여부를 알려줍니다.
보고
- 이 버퍼가 읽기 전용인 경우에만 true
공용 추상 DataBuffer <T> 좁은 (긴 크기)
내용이 이 버퍼 내용의 공유 하위 시퀀스이고 크기가 지정된 값으로 설정된 새 버퍼를 만듭니다.
새 크기는 이 버퍼 크기보다 클 수 없습니다. 이 버퍼의 내용에 대한 변경 사항은 새 버퍼에 표시되며 그 반대의 경우도 마찬가지입니다. 새 버퍼는 이 버퍼가 읽기 전용인 경우에만 읽기 전용이 됩니다.
이 호출은 slice(0, size)
와 동일합니다.
매개변수
크기 | 이 새 버퍼의 크기 |
---|
보고
- 새로운 버퍼
던지기
IllegalArgumentException | 인덱스 및/또는 크기 값이 유효성 검사를 통과하지 못하는 경우 |
---|
공용 추상 DataBuffer <T> 오프셋 (긴 인덱스)
지정된 인덱스에서 시작하여 이 버퍼 내용의 공유 하위 시퀀스를 내용으로 하는 새 버퍼를 만듭니다.
인덱스는 이 버퍼 크기보다 클 수 없습니다. 이 버퍼의 내용에 대한 변경 사항은 새 버퍼에 표시되며 그 반대의 경우도 마찬가지입니다. 새 버퍼는 이 버퍼가 읽기 전용인 경우에만 읽기 전용이 됩니다.
이 호출은 slice(index, size() - index)
와 동일합니다.
매개변수
색인 | 생성된 새 버퍼의 첫 번째 값 인덱스는 size() 보다 클 수 없습니다. |
---|
보고
- 새로운 버퍼
던지기
IllegalArgumentException | 인덱스가 유효성 검사를 통과하지 못하는 경우 |
---|
공개 추상 DataBuffer <T> 읽기 (T[] dst)
이 버퍼에 있는 개체의 참조를 대상 배열로 읽어옵니다.
이 메소드는 이 버퍼의 값을 지정된 대상 배열로 전송합니다. 요청을 충족하는 데 필요한 것보다 버퍼에 더 적은 값이 있는 경우, 즉 dst.length > size()
인 경우 값이 전송되지 않고 BufferUnderflowException이 발생합니다.
그렇지 않은 경우, 이 메소드는 이 버퍼의 n = dst.length
값을 지정된 배열로 복사합니다.
매개변수
일광 | 값을 쓸 배열 |
---|
보고
- 이 버퍼
던지기
BufferUnderflowException | 이 버퍼에서 복사할 값이 충분하지 않은 경우 |
---|
공개 추상 DataBuffer <T> 읽기 (T[] dst, int 오프셋, int 길이)
이 버퍼에 있는 개체의 참조를 대상 배열로 읽어옵니다.
이 메소드는 이 버퍼의 값을 지정된 대상 배열로 전송합니다. 요청을 충족하는 데 필요한 것보다 버퍼에 더 적은 값이 있는 경우, 즉 length > size()
인 경우 값이 전송되지 않고 BufferUnderflowException이 발생합니다.
그렇지 않은 경우, 이 메소드는 이 버퍼의 n = length
값을 지정된 오프셋에서 시작하여 지정된 배열로 복사합니다.
매개변수
일광 | 값을 쓸 배열 |
---|---|
오프셋 | 기록할 첫 번째 값의 배열 내 오프셋입니다. 음수가 아니어야 하고 dst.length 보다 크지 않아야 합니다. |
길이 | 주어진 배열에 기록될 최대 값 수입니다. 음수가 아니어야 하고 dst.length - offset |
보고
- 이 버퍼
던지기
BufferUnderflowException | 이 버퍼에 길이 값보다 적은 값이 남아 있는 경우 |
---|---|
IndexOutOfBoundsException | 오프셋 및 길이 매개변수의 전제조건이 유지되지 않는 경우 |
공용 추상 DataBuffer <T> setObject (T 값, 긴 인덱스)
주어진 값을 이 버퍼의 지정된 인덱스에 씁니다. 중요: 이 메서드의 사용은 기본이 아닌 유형의 버퍼 또는 호출자가 데이터 유형을 결정적으로 알 수 없는 경우로 제한되어야 합니다. 다른 경우에는 성능을 크게 향상시키는 기본 변형(예: IntDataBuffer.setInt(idx)
을 사용하는 것이 좋습니다.
매개변수
값 | 쓸 값 |
---|---|
색인 | 값이 기록될 인덱스 |
보고
- 이 버퍼
던지기
IndexOutOfBoundsException | 인덱스가 음수이거나 버퍼 크기보다 작지 않은 경우 |
---|---|
ReadOnlyBufferException | 이 버퍼가 읽기 전용인 경우 |
공개 추상 긴 크기 ()
요소 단위의 버퍼 크기입니다.
예를 들어, 바이트 버퍼의 경우 이 값은 이 버퍼가 보유할 수 있는 바이트 수와 같습니다. 정수 버퍼의 경우 정수 수와 동일하므로 이 버퍼의 바이트 크기는 size() * Integer.BYTES
입니다.
보고
- 버퍼 크기
공용 추상 DataBuffer <T> 슬라이스 (긴 인덱스, 긴 크기)
지정된 인덱스에서 시작하여 지정된 크기로 이 버퍼 내용의 공유 하위 시퀀스를 내용으로 하는 새 버퍼를 만듭니다.
인덱스에 새 크기를 더한 값은 이 버퍼 크기보다 클 수 없습니다. 이 버퍼의 내용에 대한 변경 사항은 새 버퍼에 표시되며 그 반대의 경우도 마찬가지입니다. 새 버퍼는 이 버퍼가 읽기 전용인 경우에만 읽기 전용이 됩니다.
매개변수
색인 | 생성된 새 버퍼의 첫 번째 값 인덱스 |
---|---|
크기 | 이 새 버퍼의 크기는 size() 보다 클 수 없습니다. |
보고
- 새로운 버퍼
던지기
IllegalArgumentException | 크기 값이 유효성 검사를 통과하지 못한 경우 |
---|
공개 추상 DataBufferWindow <? DataBuffer <T>> 창 확장 (긴 크기)
이 버퍼의 부분 보기를 제공하는 DataBufferWindow
만듭니다.
생성된 창은 고정된 크기를 가지며 이 버퍼를 따라 "slide"
하여 offset(long)
처럼 새 버퍼 인스턴스를 할당하지 않고도 데이터의 다양한 보기를 제공할 수 있습니다. 이렇게 하면 이 작업을 자주 반복할 때 전반적인 성능이 향상됩니다. 예를 들어:
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;
}
}
반환된 개체는 상태 저장 개체이며 스레드로부터 안전하지 않습니다.
매개변수
크기 | 창문의 크기 |
---|
보고
- 이 버퍼의 인덱스 0에서 시작하는 새 창
던지기
지원되지 않는 작업예외 | 이 유형의 버퍼가 버퍼 창을 지원하지 않는 경우 |
---|
공개 추상 DataBuffer <T> 쓰기 (T[] src)
소스 배열의 객체 참조를 이 버퍼에 씁니다.
이 메소드는 지정된 소스 배열의 값을 이 버퍼로 전송합니다. 이 버퍼보다 소스 배열에 더 많은 값이 있는 경우, 즉 src.length > size()
인 경우 값이 전송되지 않고 BufferOverflowException이 발생합니다.
그렇지 않은 경우 이 메서드는 지정된 배열에서 n = src.length
값을 복사합니다.
매개변수
소스 | 값을 읽어올 소스 배열 |
---|
보고
- 이 버퍼
던지기
버퍼오버플로우예외 | 소스 배열의 값을 저장할 공간이 이 버퍼에 부족한 경우 |
---|---|
ReadOnlyBufferException | 이 버퍼가 읽기 전용인 경우 |
공개 추상 DataBuffer <T> 쓰기 (T[] src, int 오프셋, int 길이)
int 배열을 사용하는 대량 넣기 방법.
이 메소드는 지정된 소스 배열의 값을 이 버퍼로 전송합니다. 이 버퍼보다 소스 배열에 더 많은 값이 있는 경우, 즉 length > size()
인 경우 값이 전송되지 않고 BufferOverflowException이 발생합니다.
그렇지 않은 경우, 이 메소드는 지정된 배열의 n = length
값을 지정된 오프셋에서 시작하여 이 버퍼에 복사합니다.
매개변수
소스 | 값을 읽어올 소스 배열 |
---|---|
오프셋 | 읽을 첫 번째 값의 배열 내 오프셋입니다. 음수가 아니어야 하고 src.length 보다 크지 않아야 합니다. |
길이 | 주어진 배열에서 읽어올 값의 수; 음수가 아니어야 하고 src.length - offset |
보고
- 이 버퍼
던지기
버퍼오버플로우예외 | 소스 배열의 값을 저장할 공간이 이 버퍼에 부족한 경우 |
---|---|
IndexOutOfBoundsException | 오프셋 및 길이 매개변수의 전제조건이 유지되지 않는 경우 |
ReadOnlyBufferException | 이 버퍼가 읽기 전용인 경우 |