버퍼

버퍼 (Buffer)

특정 기본 타입의 데이터를 담는 컨테이너예요. 버퍼는 특정 기본 타입의 원소들로 이루어진 선형 유한 시퀀스이며, capacity·limit·position이라는 핵심 속성을 지닙니다.

출처: Java API Reference

본문

Buffer는 특정 기본 타입의 데이터를 담는 컨테이너예요. 버퍼는 특정 기본 타입의 원소들로 이루어진 선형이고 유한한 시퀀스입니다.

public abstract sealed class Buffer extends Object
permits ByteBuffer, CharBuffer, DoubleBuffer, FloatBuffer, IntBuffer, LongBuffer, ShortBuffer

내용 외에 버퍼의 핵심 속성은 capacity(용량), limit(한계), position(위치) 세 가지예요.

  • capacity — 버퍼가 담고 있는 원소의 수. 음수가 될 수 없고 절대 변하지 않아요.
  • limit — 읽거나 쓰면 안 되는 첫 번째 원소의 인덱스. 음수일 수 없고 capacity보다 클 수 없어요.
  • position — 다음에 읽거나 쓸 원소의 인덱스. 음수일 수 없고 limit보다 클 수 없습니다.

각 비-boolean 기본 타입마다 이 클래스의 하위 클래스가 하나씩 있어요. 데이터 전송에는 두 종류의 get/put 연산이 정의됩니다.

  • 상대 연산(relative) — 현재 position에서 시작해 하나 이상의 원소를 읽거나 쓰고 position을 전송된 원소 수만큼 증가시켜요. 요청이 limit을 초과하면 BufferUnderflowException(get)이나 BufferOverflowException(put)이 던져집니다.
  • 절대 연산(absolute) — 명시적인 원소 인덱스를 받고 position에는 영향을 주지 않아요.

핵심 메서드:

public final int capacity()
public final int position()
public Buffer position(int newPosition)
public final int limit()
public Buffer limit(int newLimit)
public Buffer flip()
public Buffer clear()
public Buffer rewind()
public final int remaining()

flip()은 버퍼를 읽기 모드로 전환하고, clear()는 버퍼를 재사용하도록 초기화하며, rewind()는 position을 0으로 되돌려 다시 읽을 수 있게 해요. 이 클래스는 sealed라서 허용된 하위 클래스(각 기본 타입 버퍼)만 상속할 수 있습니다.

더 알아보기 (Learn more)