DataBuffer — 데이터 버퍼 추상 클래스

DataBuffer — 데이터 버퍼 추상 클래스 (java.awt.image)

하나 이상의 데이터 배열을 감싸기 위해 존재하는 추상 클래스예요. DataBuffer의 각 데이터 배열을 뱅크(bank)라고 해요.

출처: Java API Reference

본문

DataBufferjava.lang.Object를 확장하고, 직접 알려진 서브클래스로 DataBufferByte, DataBufferDouble, DataBufferFloat, DataBufferInt, DataBufferShort, DataBufferUShort가 있어요.

뱅크의 요소를 가져오고 설정하는 접근자 메서드는 뱅크 지정자가 있거나 없이 존재해요. 뱅크 지정자가 없는 메서드는 기본 0번째 뱅크를 사용해요. DataBuffer는 뱅크당 오프셋을 선택적으로 받을 수 있어, 흥미로운 데이터가 배열 위치 0에서 시작하지 않아도 기존 배열의 데이터를 사용할 수 있어요. 뱅크의 0번째 요소를 가져오거나 설정하면 배열의 (0+offset)번째 요소를 사용해요. size 필드는 데이터 배열의 사용 가능한 양을 지정해요. 주어진 뱅크의 size + offset은 연결된 데이터 배열의 길이보다 크면 안 돼요.

데이터 버퍼의 데이터 타입은 데이터 배열의 타입을 나타내고 추가 의미(예: byte 배열 요소에 unsigned 8비트 데이터 저장)를 나타낼 수도 있어요. 데이터 타입은 TYPE_UNDEFINED 또는 아래 정의된 타입 중 하나일 수 있어요.

일반적으로 DataBuffer 객체는 성능 향상을 위해 데이터 타입별 서브클래스로 다운캐스트되어 사용돼요. 현재 Java 2D API 이미지 클래스는 TYPE_BYTE, TYPE_USHORT, TYPE_INT, TYPE_SHORT, TYPE_FLOAT, TYPE_DOUBLE DataBuffer로 이미지 데이터를 저장해요.

필드

수식자·타입 필드 설명
protected int banks 이 DataBuffer의 뱅크 수
protected int dataType 이 DataBuffer의 데이터 타입
protected int offset 기본(첫) 뱅크에서 첫 요소를 가져올 오프셋
protected int[] offsets 모든 뱅크로의 오프셋
protected int size 모든 뱅크의 사용 가능한 크기
static final int TYPE_BYTE unsigned byte 데이터 태그
static final int TYPE_USHORT unsigned short 데이터 태그
static final int TYPE_SHORT signed short 데이터 태그
static final int TYPE_INT int 데이터 태그
static final int TYPE_FLOAT float 데이터 태그
static final int TYPE_DOUBLE double 데이터 태그
static final int TYPE_UNDEFINED 정의되지 않은 데이터 태그

생성자

protected DataBuffer(int dataType, int size)

지정된 데이터 타입과 크기의 한 뱅크를 포함하는 DataBuffer를 구성해요.

protected DataBuffer(int dataType, int size, int numBanks)

지정된 수의 뱅크를 포함하는 DataBuffer를 구성해요. 각 뱅크는 지정된 크기를 가지고 오프셋은 0이에요.

protected DataBuffer(int dataType, int size, int numBanks, int offset)

지정된 수의 뱅크를 포함하는 DataBuffer를 구성해요. 각 뱅크는 지정된 데이터 타입, 크기, 오프셋을 가져요.

protected DataBuffer(int dataType, int size, int numBanks, int[] offsets)

지정된 수의 뱅크를 포함하는 DataBuffer를 구성해요. 각 뱅크의 오프셋은 offsets 배열의 해당 항목으로 지정돼요.

예외: ArrayIndexOutOfBoundsExceptionnumBanksoffsets의 길이와 같지 않을 때

메서드 상세

getDataTypeSize(int type)

public static int getDataTypeSize(int type)

데이터 타입 태그가 주어지면 그 데이터 타입의 크기(비트)를 반환해요.

예외: IllegalArgumentExceptiontype이 0보다 작거나 TYPE_DOUBLE보다 클 때

getDataType() / getSize() / getOffset() / getOffsets() / getNumBanks()

public int getDataType()
public int getSize()
public int getOffset()
public int[] getOffsets()
public int getNumBanks()

각각 데이터 타입, 모든 뱅크의 크기, 기본 뱅크의 오프셋, 모든 뱅크의 오프셋, 뱅크 수를 반환해요.

getElem(int i) / getElem(int bank, int i) / setElem(int i, int val) / setElem(int bank, int i, int val)

public int getElem(int i)
public abstract int getElem(int bank, int i)
public void setElem(int i, int val)
public abstract void setElem(int bank, int i, int val)

요청된 데이터 배열 요소를 정수로 가져오거나(bank 버전은 지정된 뱅크에서) 지정된 정수로 설정해요. 은행 지정자가 없는 메서드는 기본 0번째 뱅크를 사용해요.

getElemFloat(int i) / getElemFloat(int bank, int i) / setElemFloat(...)

public float getElemFloat(int i)
public float getElemFloat(int bank, int i)
public void setElemFloat(int i, float val)
public void setElemFloat(int bank, int i, float val)

요청된 요소를 float로 가져오거나 지정된 float로 설정해요. 이 클래스의 구현은 getElem을 float로 캐스팅(또는 val을 int로 캐스팅해 setElem 호출)하는 것이라, 서브클래스가 필요에 따라 오버라이드할 수 있어요.

getElemDouble(int i) / getElemDouble(int bank, int i) / setElemDouble(...)

public double getElemDouble(int i)
public double getElemDouble(int bank, int i)
public void setElemDouble(int i, double val)
public void setElemDouble(int bank, int i, double val)

요청된 요소를 double로 가져오거나 지정된 double로 설정해요. 이 클래스의 구현은 getElem을 double로 캐스팅(또는 val을 int로 캐스팅해 setElem 호출)하는 것이라, 서브클래스가 오버라이드할 수 있어요.

더 알아보기