LongBuffer — long 버퍼
LongBuffer — long 버퍼
long 버퍼를 나타내는 추상 클래스예요. 버퍼는 고정된 용량(capacity)을 가지며, position(현재 위치), limit(한계), mark(표시) 상태를 가져요. 이 클래스는 long 버퍼에 대한 네 가지 범주의 연산을 정의해요: 단일 long를 읽고 쓰는 절대·상대 get/put 메서드, 이 버퍼에서 배열로 연속 long 시퀀스를 옮기는 절대·상대 벌크 get 메서드, long 배열이나 다른 long 버퍼에서 이 버퍼로 연속 long 시퀀스를 옮기는 절대·상대 벌크 put 메서드, 그리고 long 버퍼를 컴팩트 하는 메서드예요.
본문
long 버퍼는 할당(allocation)으로 만들거나 기존 long 배열을 래핑(wrapping)해서 만들 수 있어요. 또한 한 버퍼에서 다른 버퍼로 내용을 복사하는 것도 가능해요. 버퍼는 직접(direct) 버퍼일 수 있고, 읽기 전용으로 만들 수도 있어요.
생성 팩토리
public static LongBuffer allocate(int capacity)— 새 long 버퍼를 할당해요. 새 버퍼의 position은 0, limit은 capacity, mark는 정의되지 않으며 각 요소는 0으로 초기화되고 바이트 순서는 기반 하드웨어의 기본 순서예요.public static LongBuffer wrap(long[] array, int offset, int length)— long 배열을 버퍼로 래핑해요. capacity는array.length, position은offset, limit은offset+length예요.public static LongBuffer wrap(long[] array)— long 배열을 버퍼로 래핑해요. capacity와 limit은array.length예요.
뷰 생성
public abstract LongBuffer slice()— 이 버퍼 내용의 공유 하위 시퀀스인 새 long 버퍼를 만들어요. 새 버퍼의 내용은 이 버퍼의 현재 position에서 시작하며, 한쪽의 변경이 다른 쪽에 보여요.public abstract LongBuffer slice(int index, int length)— 이 버퍼 내용의 공유 하위 시퀀스인 새 long 버퍼를 만들어요.public abstract LongBuffer duplicate()— 이 버퍼의 내용을 공유하는 새 long 버퍼를 만들어요. 내용은 같지만 별도의 position/limit/mark를 가져요.public abstract LongBuffer asReadOnlyBuffer()— 이 버퍼의 내용을 공유하는 새 읽기 전용 long 버퍼를 만들어요.
읽기/쓰기
public abstract long get()— 상대 get 메서드예요. 이 버퍼의 현재 position에 있는 long를 읽고 position을 증가시켜요.public abstract LongBuffer put(long f)— 상대 put 메서드(선택 연산)예요. 주어진 long를 현재 position에 쓰고 position을 증가시켜요.public abstract long get(int index)— 절대 get 메서드예요. 주어진 인덱스의 long를 읽어요.public abstract LongBuffer put(int index, long f)— 절대 put 메서드(선택 연산)예요. 주어진 인덱스에 long를 써요.public LongBuffer get(long[] dst, int offset, int length)— 상대 벌크 get 메서드예요. 이 버퍼에서 주어진 목적 배열로 long를 옮겨요.public LongBuffer get(long[] dst)— 상대 벌크 get 메서드예요. 이 버퍼에서 주어진 배열 전체로 long를 옮겨요.public LongBuffer get(int index, long[] dst, int offset, int length)— 절대 벌크 get 메서드예요. 이 버퍼의 주어진 인덱스에서 시작해 주어진 배열로length개의 long를 옮겨요.public LongBuffer get(int index, long[] dst)— 절대 벌크 get 메서드예요. position에 영향을 주지 않고 옮겨요.public LongBuffer put(LongBuffer src)— 상대 벌크 put 메서드(선택 연산)예요. 주어진 원본 버퍼의 남은 long들을 이 버퍼로 옮겨요.public LongBuffer put(int index, LongBuffer src, int offset, int length)— 절대 벌크 put 메서드(선택 연산)예요.public LongBuffer put(long[] src, int offset, int length)— 상대 벌크 put 메서드(선택 연산)예요. 주어진 원본 배열에서 이 버퍼로 long를 옮겨요.public final LongBuffer put(long[] src)— 상대 벌크 put 메서드(선택 연산)예요. 원본 배열의 전체 내용을 옮겨요.public LongBuffer put(int index, long[] src, int offset, int length)— 절대 벌크 put 메서드(선택 연산)예요.public LongBuffer put(int index, long[] src)— 절대 벌크 put 메서드(선택 연산)예요.
백킹 배열
public final boolean hasArray()— 이 버퍼가 접근 가능한 long 배열로 백킹되는지 여부를 반환해요.public final long[] array()— 이 버퍼를 백킹하는 long 배열을 반환해요(선택 연산).public final int arrayOffset()— 이 버퍼의 백킹 배열에서 버퍼의 첫 요소의 오프셋을 반환해요(선택 연산).
상태 관리
public final LongBuffer position(int newPosition)— 이 버퍼의 position을 설정해요. mark가 정의되어 있고 새 position보다 크면 mark는 버려져요.public final LongBuffer limit(int newLimit)— 이 버퍼의 limit을 설정해요.public final LongBuffer mark()— 이 버퍼의 표시를 position에 설정해요.public final LongBuffer reset()— position을 이전에 표시한 위치로 리셋해요.public final LongBuffer clear()— 이 버퍼를 비워요. position은 0, limit은 capacity, mark는 버려져요. 재사용 전에 호출해요.public final LongBuffer flip()— 이 버퍼를 플립해요. limit은 현재 position으로 설정되고 position은 0이 돼요. 채우고 난 뒤 읽기 전에 호출해요.public final LongBuffer rewind()— 이 버퍼를 되감아요. position은 0, mark는 버려져요. 채널 쓰기나 get 연산 전에 호출해요.public abstract LongBuffer compact()— 이 버퍼를 컴팩트해요(선택 연산). position과 limit 사이의 long들을 시작으로 복사해요.
비교와 기타
public abstract boolean isDirect()— 이 long 버퍼가 직접(direct) 버퍼인지 여부를 반환해요.public String toString()— 이 버퍼의 상태를 요약한 문자열을 반환해요.public int hashCode()— 이 버퍼의 현재 해시 코드를 반환해요. 남은 요소들에만 의존해요.public boolean equals(Object ob)— 이 버퍼가 다른 객체와 같은지 여부를 반환해요.public int compareTo(LongBuffer that)— 이 버퍼를 다른 버퍼와 비교해요. 남은 요소들을 사전순으로 비교해요.public int mismatch(LongBuffer that)— 이 버퍼와 주어진 버퍼 사이의 첫 불일치의 상대 인덱스를 찾아 반환해요.public abstract ByteOrder order()— 이 버퍼의 바이트 순서를 반환해요.
LongBuffer buf = LongBuffer.allocate(8);
buf.put(1.5f).put(2.5f).flip(); // 채우고 읽기 준비
while (buf.hasRemaining()) {{
System.out.println(buf.get());
}}