|
JavaTM Platform Standard Ed. 6 |
|||||||||
앞의 클래스 다음의 클래스 | 프레임 있어 프레임 없음 | |||||||||
개요: 상자 | 필드 | 생성자 | 메소드 | 상세: 필드 | 생성자 | 메소드 |
java.lang.Objectjava.nio.Buffer
java.nio.ByteBuffer
public abstract class ByteBuffer
byte 버퍼입니다.
이 클래스는, byte 버퍼에 대한 조작을 다음의 6 개의 카테고리로 분류합니다.
연속한 byte 순서를 이 버퍼로부터 배열로 전송 하는 상대
메소드 일괄 get
연속한 byte 순서를 바이트 배열이나 그 외의 byte 버퍼로부터 이 버퍼로 전송 하는 상대
메소드 일괄 put
그 외의 원시형의 값의 read와 기입을 실시해, 이러한 값과 byte 순서를 특정의 바이트 순서로 상호 변환하는, 절대 및 상대
/get
메소드 put
그 외의 원시형의 값을 포함하는 버퍼로서 byte 버퍼를 표시할 수 있는, 「뷰 버퍼(view buffer)」의 작성 메소드
byte 버퍼를 작성하려면 , 버퍼의 컨텐츠에 용량을 할당하는 byte 버퍼에는, 「다이렉트」버퍼와 「비다이렉트」버퍼가 있습니다. 다이렉트 byte 버퍼의 경우, Java 가상 머신은, 네이티브의 입출력 조작을 직접 실행하려고 합니다. 이것은, 기본이 되는 operating system 고유의 입출력 조작을 호출할 때, 중간 버퍼를 거치지 않는다는 것입니다.
다이렉트 byte 버퍼는, 이 클래스의 팩토리 메소드 다이렉트 byte 버퍼는, 파일의 특정의 영역을 메모리에 직접 특정의 byte 버퍼가 다이렉트 버퍼, 비다이렉트 버퍼의 어디에서 있을까를 판단하려면 , 이 클래스에는, 그 외의 모든 원시형 (boolean 를 제외한다)의 값의 read와 기입을 실시하는 메소드가 정의되고 있습니다. 프리미티브(primitive)치와 바이트 순서와의 상호 변환은, 버퍼의 현재의 바이트 순서에 따라 행해집니다. 바이트 순서를 취득 및 변경하려면 , 이종 바이너리 데이터, 즉 형태가 다른 값의 순서에 액세스 할 수 있도록(듯이) 하기 위한(해), 이 클래스는, 형태 마다 일련의 절대 및 상대 get/put 메소드의 패밀리를 정의합니다. 예를 들어, 32 비트의 부동 소수점수(실수) (float 치)의 경우, 다음의 메소드가 정의됩니다.
char,short,int,long,double 의 각 형에도, 같은 메소드가 정의되고 있습니다. 절대 get/put 메소드의 인덱스 파라미터의 단위는, 읽어들여 또는 기입의 대상이 되는 형태는 아니고, 바이트입니다.
동종의 바이너리 데이터, 즉 같은 형태의 값의 순서에 액세스 할 수 있도록(듯이) 하기 위한(해), 이 클래스에는, 지정된 byte 버퍼의 「뷰」를 작성하는 메소드가 정의되고 있습니다. 「뷰 버퍼(view buffer)」란, byte 버퍼에 연동한 내용을 가지는, 다른 버퍼입니다. byte 버퍼의 내용으로 변경을 더하면(자), 뷰 버퍼(view buffer)에도 그 내용이 반영됩니다. 반대로, 뷰 버퍼(view buffer)의 내용으로 변경을 더하면(자), byte 버퍼에도 그 내용이 반영됩니다. 이 2 개의 버퍼의 위치, 리밋트, 마크의 값은, 각각 독립하고 있습니다. 예를 들어, 뷰 버퍼(view buffer)에는, 전술한 일련의 형태 고유의 get/put 메소드에 우수한 중요한 이점이 3 개 있습니다.
뷰 버퍼(view buffer)에는, 바이트는 아니고, 그 값의 형태 고유의 사이즈에 의해 인덱스를 붙일 수 있다 뷰 버퍼(view buffer)는, 버퍼와 배열 또는 같은 형태의 그 외의 버퍼간에 연속한 값의 순서를 교환할 수 있는, 상대 일괄 get/put 메소드를 제공한다 뷰 버퍼(view buffer)는, 보조 byte 버퍼가 다이렉트 버퍼인 경우에 한정해 다이렉트 버퍼가 된다고 하는 점으로써, 잠재적으로 효율이 좋다 뷰 버퍼(view buffer)의 바이트 순서는, 뷰의 생성시에 byte 버퍼와 같은 것에 고정됩니다. 이 클래스의 메소드중 반환값을 돌려주지 않는 것은, 자신을 호출한 버퍼의 정보를 돌려줍니다. 이것을 응용해, 메소드 호출을 연쇄시킬 수가 있습니다.
예를 들어, 다음과 같은 연속한 문장이 있다고 합시다.
조작을 실행하는지,
기존의 바이트 배열을 버퍼에할당
합니다.
랩
다이렉트 버퍼와 비다이렉트 버퍼
allocateDirect
를 호출하면(자) 작성됩니다. 일반적으로은, 이쪽의 버퍼 쪽이, 비다이렉트 버퍼보다 할당 및 해제 코스트가 약간 비싸집니다. 다이렉트 버퍼의 내용이 표준의 가베지 컬렉트된 heap의 외부에 있다면, 어플리케이션의 메모리 사용량(footprint)에 대한 영향은 정확히 알 수 없는 것입니다. 이것으로부터, 다이렉트 버퍼에는, 기본이 되는 시스템 고유의 입출력 조작에 종속되는, 수명이 길게 용량의 큰 버퍼를 지정하는 것을 추천합니다. 일반적으로, 다이렉트 버퍼의 할당은, 프로그램의 성능을 충분히 개선할 수 있을 전망이 있는 경우에게만 실시해야 합니다.
하는 방법에서도 작성할 수 있습니다. Java 플랫폼의 구현에 따라서는, JNI 를 개입시켜 native code로부터 다이렉트 byte 버퍼를 생성하는 기능이 옵션으로 지원되고 있을 가능성이 있습니다. 이러한 종류의 버퍼의 인스턴스가, 메모리내의 액세스 할 수 없는 영역을 참조했을 경우, 그 영역에 액세스 하려고 해도 버퍼의 컨텐츠는 변경되지 않고, 액세스시 또는 액세스 후에 어떠한 예외가 throw 됩니다.
매핑
isDirect
메소드를 호출합니다. 이 메소드를 사용하면(자), 성능이 중시되는 코드내에서 명시적으로 버퍼 관리를 실시할 수 있습니다.
바이너리 데이터에의 액세스
order
메소드를 사용합니다. 특정의 바이트 순서는,ByteOrder
클래스의 인스턴스로 나타내집니다. byte 버퍼의 초기 순서는, 항상 BIG_ENDIAN
입니다.
float
getFloat()
float getFloat(int index)
void putFloat(float f)
void putFloat(int index, float f)
asFloatBuffer
메소드는, 이 메소드의 호출원의 byte 버퍼에 연동한 FloatBuffer
클래스의 인스턴스를 생성합니다. char,short,int,long,double 의 각 형에 대해서도, 같은 뷰 작성 메소드가 정의되고 있습니다.
호출의 연쇄
이것들은, 다음의 한 문장으로 옮겨놓을 수 있습니다.
bb.putInt(0xCAFEBABE);
bb.putShort(3);
bb.putShort(45);
bb.putInt(0xCAFEBABE). putShort(3). putShort(45);
메소드의 개요 | |
---|---|
static ByteBuffer |
allocate (int capacity)
새로운 byte 버퍼를 할당합니다. |
static ByteBuffer |
allocateDirect (int capacity)
새로운 다이렉트 byte 버퍼를 할당합니다. |
byte[] |
array ()
이 버퍼를 보조하는 바이트 배열을 돌려줍니다 (임의 조작). |
int |
arrayOffset ()
현재의 버퍼의 보조 배열내에 있는, 이 버퍼의 최초의 요소의 오프셋(offset)를 돌려줍니다 (옵션). |
abstract CharBuffer |
asCharBuffer ()
문자 버퍼로서 이 byte 버퍼의 뷰를 작성합니다. |
abstract DoubleBuffer |
asDoubleBuffer ()
double 버퍼로서 이 byte 버퍼의 뷰를 작성합니다. |
abstract FloatBuffer |
asFloatBuffer ()
float 버퍼로서 이 byte 버퍼의 뷰를 작성합니다. |
abstract IntBuffer |
asIntBuffer ()
int 버퍼로서 이 byte 버퍼의 뷰를 작성합니다. |
abstract LongBuffer |
asLongBuffer ()
long 버퍼로서 이 byte 버퍼의 뷰를 작성합니다. |
abstract ByteBuffer |
asReadOnlyBuffer ()
이 버퍼의 내용을 공유하는 새로운 read 전용 byte 버퍼를 작성합니다. |
abstract ShortBuffer |
asShortBuffer ()
short 버퍼로서 이 byte 버퍼의 뷰를 작성합니다. |
abstract ByteBuffer |
compact ()
현재의 버퍼를 압축합니다 (옵션). |
int |
compareTo (ByteBuffer that)
현재의 버퍼를 다른 버퍼와 비교합니다. |
abstract ByteBuffer |
duplicate ()
이 버퍼의 내용을 공유하는 새로운 byte 버퍼를 작성합니다. |
boolean |
equals (Object ob)
현재의 버퍼가 다른 객체와 등가일지 어떨지를 판단합니다. |
abstract byte |
get ()
상대 「get」메소드입니다. |
ByteBuffer |
get (byte[] dst)
상대 일괄 「get」메소드입니다. |
ByteBuffer |
get (byte[] dst,
int offset,
int length)
상대 일괄 「get」메소드입니다. |
abstract byte |
get (int index)
절대 「get」메소드입니다. |
abstract char |
getChar ()
char 값를 읽어내는 상대 「get」메소드입니다. |
abstract char |
getChar (int index)
char 값를 읽어내는 절대 「get」메소드입니다. |
abstract double |
getDouble ()
double 치를 읽어내는 상대 「get」메소드입니다. |
abstract double |
getDouble (int index)
double 치를 읽어내는 절대 「get」메소드입니다. |
abstract float |
getFloat ()
float 치를 읽어내는 상대 「get」메소드입니다. |
abstract float |
getFloat (int index)
float 치를 읽어내는 절대 「get」메소드입니다. |
abstract int |
getInt ()
int 치를 읽어내는 상대 「get」메소드입니다. |
abstract int |
getInt (int index)
int 치를 읽어내는 절대 「get」메소드입니다. |
abstract long |
getLong ()
long 치를 읽어내는 상대 「get」메소드입니다. |
abstract long |
getLong (int index)
long 치를 읽어내는 절대 「get」메소드입니다. |
abstract short |
getShort ()
short 치를 읽어내는 상대 「get」메소드입니다. |
abstract short |
getShort (int index)
short 치를 읽어내는 절대 「get」메소드입니다. |
boolean |
hasArray ()
이 버퍼가 액세스 가능한 바이트 배열에 연동할지 어떨지를 판단합니다. |
int |
hashCode ()
현재의 버퍼의 현재의 해시 코드를 돌려줍니다. |
abstract boolean |
isDirect ()
이 byte 버퍼가 다이렉트 버퍼일지 어떨지를 판단합니다. |
ByteOrder |
order ()
현재의 버퍼의 바이트 순서를 가져옵니다. |
ByteBuffer |
order (ByteOrder bo)
이 버퍼의 바이트 순서를 변경합니다. |
abstract ByteBuffer |
put (byte b)
상대 「put」메소드입니다 (옵션). |
ByteBuffer |
put (byte[] src)
상대 일괄 「put」메소드입니다 (옵션). |
ByteBuffer |
put (byte[] src,
int offset,
int length)
상대 일괄 「put」메소드입니다 (옵션). |
ByteBuffer |
put (ByteBuffer src)
상대 일괄 「put」메소드입니다 (옵션). |
abstract ByteBuffer |
put (int index,
byte b)
절대 「put」메소드입니다 (옵션). |
abstract ByteBuffer |
putChar (char value)
char 값를 기입하는 상대 「put」메소드입니다 (임의 조작). |
abstract ByteBuffer |
putChar (int index,
char value)
char 값를 기입하는 절대 「put」메소드입니다 (임의 조작). |
abstract ByteBuffer |
putDouble (double value)
double 치를 기입하는 상대 「put」메소드입니다 (임의 조작). |
abstract ByteBuffer |
putDouble (int index,
double value)
double 치를 기입하는 절대 「put」메소드입니다 (임의 조작). |
abstract ByteBuffer |
putFloat (float value)
float 치를 기입하는 상대 「put」메소드입니다 (임의 조작). |
abstract ByteBuffer |
putFloat (int index,
float value)
float 치를 기입하는 절대 「put」메소드입니다 (임의 조작). |
abstract ByteBuffer |
putInt (int value)
int 치를 기입하는 상대 「put」메소드입니다 (임의 조작). |
abstract ByteBuffer |
putInt (int index,
int value)
int 치를 기입하는 절대 「put」메소드입니다 (임의 조작). |
abstract ByteBuffer |
putLong (int index,
long value)
long 치를 기입하는 절대 「put」메소드입니다 (임의 조작). |
abstract ByteBuffer |
putLong (long value)
long 치를 기입하는 상대 「put」메소드입니다 (임의 조작). |
abstract ByteBuffer |
putShort (int index,
short value)
short 치를 기입하는 절대 「put」메소드입니다 (임의 조작). |
abstract ByteBuffer |
putShort (short value)
short 치를 기입하는 상대 「put」메소드입니다 (임의 조작). |
abstract ByteBuffer |
slice ()
이 버퍼의 공유의 서브 순서를 내용으로 하는 새로운 byte 버퍼를 작성합니다. |
String |
toString ()
이 버퍼 상태를 요약한 캐릭터 라인을 돌려줍니다. |
static ByteBuffer |
wrap (byte[] array)
바이트 배열을 버퍼에 랩 합니다. |
static ByteBuffer |
wrap (byte[] array,
int offset,
int length)
바이트 배열을 버퍼에 랩 합니다. |
클래스 java.nio. Buffer 로부터 상속된 메소드 |
---|
capacity , clear , flip , hasRemaining , isReadOnly , limit , limit , mark , position , position , remaining , reset , rewind |
클래스 java.lang. Object 로부터 상속된 메소드 |
---|
clone , finalize , getClass , notify , notifyAll , wait , wait , wait |
메소드의 상세 |
---|
public static ByteBuffer allocateDirect(int capacity)
새로운 버퍼의 위치는 0, 리밋트는 용량과 같은 값이 됩니다. 마크는 정의되지 않습니다.
을 이용할지 어떨지는 지정되지 않습니다. 보조 배열
capacity
- 새로운 버퍼의 용량 (바이트)
IllegalArgumentException
- capacity 가 부의 정수인 경우public static ByteBuffer allocate(int capacity)
새로운 버퍼의 위치는 0, 리밋트는 용량과 같은 값이 됩니다. 마크는 정의되지 않습니다. 이 버퍼는
을 이용해, 그보조 배열
는 0 이 됩니다.
배열 오프셋(offset)
capacity
- 새로운 버퍼의 용량 (바이트)
IllegalArgumentException
- capacity 가 부의 정수인 경우public static ByteBuffer wrap(byte[] array, int offset, int length)
새로운 버퍼는 지정된 바이트 배열에 의해 보조됩니다. 버퍼로 변경을 더하면(자) 배열도 변경되어 배열로 변경을 더하면(자) 버퍼도 변경됩니다. 새로운 버퍼의 용량은 array.length, 위치는 offset, 리밋트는 offset + length 가 됩니다. 마크는 정의되지 않습니다. 지정된 배열이
이 되어, 그보조 배열
는 0 이 됩니다. 배열 오프셋(offset)
array
- 새로운 버퍼를 보조하는 배열offset
- 사용하는 서브 배열의 오프셋(offset). array.length 이하의 부가 아닌 값이 아니면 안된다.
새로운 버퍼의 위치는, 이 값으로 설정되는length
- 사용하는 서브 배열의 오프셋(offset).
array.length - offset 이하의 부가 아닌 값이 아니면 안된다.
새로운 버퍼의 리밋트는,offset + length 로 설정된다
IndexOutOfBoundsException
- offset 파라미터와 length 파라미터의 전제 조건이 채워지지 않은 경우public static ByteBuffer wrap(byte[] array)
새로운 버퍼는 지정된 바이트 배열에 의해 보조됩니다. 버퍼로 변경을 더하면(자) 배열도 변경되어 배열로 변경을 더하면(자) 버퍼도 변경됩니다. 새로운 버퍼의 용량과 리밋트는 array.length, 위치는 0 이 됩니다. 마크는 정의되지 않습니다. 지정된 배열이
이 되어, 그보조 배열
는 0 이 됩니다. 배열 오프셋(offset)
array
- 현재의 버퍼를 보조하는 배열
public abstract ByteBuffer slice()
새로운 버퍼의 컨텐츠는, 현재의 버퍼의 현재 위치로부터 시작됩니다. 현재의 버퍼의 컨텐츠로 변경을 더하면(자), 그 내용이 새로운 버퍼에 반영됩니다. 새로운 버퍼의 컨텐츠로 변경을 더하면(자), 그 내용이 현재의 버퍼에 반영됩니다. 2 개의 버퍼의 위치, 리밋트, 마크의 값은 각각 다릅니다.
새로운 버퍼의 위치는 0, 용량과 리밋트는 이 버퍼내에 남아 있는 바이트수가 됩니다. 마크는 정의되지 않습니다. 새로운 버퍼는, 현재의 버퍼가 다이렉트 버퍼인 경우에 한정해 다이렉트 버퍼가 됩니다. 또, 현재의 버퍼가 읽어내 전용 버퍼인 경우에 한정해 읽기 전용 버퍼가 됩니다.
public abstract ByteBuffer duplicate()
새로운 버퍼의 컨텐츠는, 현재의 버퍼의 컨텐츠와 같게 됩니다. 현재의 버퍼의 컨텐츠로 변경을 더하면(자), 그 내용이 새로운 버퍼에 반영됩니다. 새로운 버퍼의 컨텐츠로 변경을 더하면(자), 그 내용이 현재의 버퍼에 반영됩니다. 2 개의 버퍼의 위치, 리밋트, 마크의 값은 각각 다릅니다.
새로운 버퍼의 용량, 리밋트, 위치, 마크의 값은, 현재의 버퍼의 대응하는 값과 같게 됩니다. 새로운 버퍼는, 현재의 버퍼가 다이렉트 버퍼인 경우에 한정해 다이렉트 버퍼가 됩니다. 또, 현재의 버퍼가 읽어내 전용 버퍼인 경우에 한정해 읽기 전용 버퍼가 됩니다.
public abstract ByteBuffer asReadOnlyBuffer()
새로운 버퍼의 컨텐츠는, 현재의 버퍼의 컨텐츠와 같게 됩니다. 현재의 버퍼의 컨텐츠로 변경을 더하면(자), 그 내용이 새로운 버퍼에 반영됩니다. 그러나, 새로운 버퍼 자체는 읽어내 전용이며, 그 공유 컨텐츠를 변경할 수 없습니다. 2 개의 버퍼의 위치, 리밋트, 마크의 값은 각각 다릅니다.
새로운 버퍼의 용량, 리밋트, 위치, 마크의 값은, 현재의 버퍼의 대응하는 값과 같게 됩니다.
현재의 버퍼가 읽어내 전용의 경우, 이 메소드의 동작은 duplicate
메소드와 완전히 같게 됩니다.
public abstract byte get()
BufferUnderflowException
- 버퍼의 현재 위치가 리밋트 이상인 경우public abstract ByteBuffer put(byte b)
버퍼의 현재 위치로 지정된 바이트를 기입해, 현재 위치의 값을 증가합니다.
b
- 기입해지는 바이트
BufferOverflowException
- 현재의 버퍼의 현재 위치가 리밋트 이상인 경우
ReadOnlyBufferException
- 현재의 버퍼가 읽어들여 전용 버퍼인 경우public abstract byte get(int index)
index
- 바이트의 read 위치를 나타내는 인덱스
IndexOutOfBoundsException
- index 가 부의 수인 경우, 또는 버퍼의 리밋트 이상인 경우public abstract ByteBuffer put(int index, byte b)
이 버퍼의 지정된 인덱스 위치로 지정된 바이트를 기입합니다.
index
- 바이트의 기입처를 나타내는 인덱스b
- 기입해지는 바이트치
IndexOutOfBoundsException
- index 가 부의 수인 경우, 또는 버퍼의 리밋트 이상인 경우
ReadOnlyBufferException
- 현재의 버퍼가 읽어들여 전용 버퍼인 경우public ByteBuffer get(byte[] dst, int offset, int length)
이 메소드는, 이 버퍼로부터 지정된 배열에 바이트를 전송 합니다. 이 버퍼내에 남아 있는 바이트수가 요구에 못 미친 경우 (즉,length > remaining() 인 경우), 바이트는 일절 전송 되지 않고,BufferUnderflowException
가 throw 됩니다.
그 이외의 경우, 이 메소드는, 이 버퍼의 현재 위치로부터 length 바이트가 지정된 배열의 지정된 오프셋(offset) 위치에 카피합니다. 그때마다, 현재의 버퍼의 위치가 length 두개증가합니다.
이 메소드를 src.get(dst, off, len) 의 형식에서 호출하면(자), 이하의 루프와 완전히 같은 결과가 됩니다.
for (int i = off; i < off + len; i++) dst[i] = src.get();다만, 이 버퍼내에 충분한 수의 byte 수가 있는 것을 최초로 확인하는 동작은 제외합니다. 또, 이 메소드를 사용하는 편이 루프보다 아득하게 효율적입니다.
dst
- 바이트의 기입처가 되는 배열offset
- 최초의 바이트의 기입처가 되는 배열내의 오프셋(offset).
dst.length 이하의 부가 아닌 값이 아니면 안되는 length
- 지정된 배열에 기입해지는 최대 바이트수.
dst.length - offset 이하의 부가 아닌 값이 아니면 안된다
BufferUnderflowException
- 이 버퍼내에 남아 있는 바이트수가 length 보다 적은 경우
IndexOutOfBoundsException
- offset 파라미터와 length 파라미터의 전제 조건이 채워지지 않은 경우public ByteBuffer get(byte[] dst)
이 메소드는, 이 버퍼로부터 지정된 배열에 바이트를 전송 합니다. 이 메소드를 src.get(a) 의 형식에서 호출하면(자), 이하의 호출과 같은 결과가 됩니다.
src.get(a, 0, a.length)
BufferUnderflowException
- 이 버퍼내에 남아 있는 바이트수가 length 보다 적은 경우public ByteBuffer put(ByteBuffer src)
이 메소드는, 지정된 소스 버퍼내에 남아 있는 바이트를 이 버퍼에 전송 합니다. 소스 버퍼내에 남아 있는 바이트수가 이 버퍼내에 남아 있는 바이트수보다 많은 경우 (즉,src.remaining() > remaining() 인 경우), 바이트는 일절 전송 되지 않고,BufferOverflowException
가 throw 됩니다.
그 이외의 경우, 이 메소드는, 지정된 버퍼의 현재 위치로부터 이 버퍼의 현재 위치에 n = src.remaining() 바이트를 카피합니다. 그때마다, 양쪽 모두의 버퍼의 위치가 n 두개증가합니다.
이 메소드를 dst.put(src) 의 형식에서 호출하면(자), 이하의 루프와 완전히 같은 결과가 됩니다.
while (src.hasRemaining()) dst.put(src.get());다만, 현재의 버퍼내에 충분한 용량이 있는 것을 최초로 확인하는 동작은, 이 메소드에 고유합니다. 또, 이 메소드 쪽이 루프보다 쭉 효율적입니다.
src
- 바이트의 read처가 되는 소스 버퍼 (이 버퍼 이외)
BufferOverflowException
- 소스 버퍼내에 남아 있는 바이트수에 대해서,
이 버퍼내의 용량이 부족한 경우
IllegalArgumentException
- 소스 버퍼로서 현재의 버퍼를 지정했을 경우
ReadOnlyBufferException
- 현재의 버퍼가 읽어들여 전용 버퍼인 경우public ByteBuffer put(byte[] src, int offset, int length)
이 메소드는, 지정된 소스 배열로부터 이 버퍼에 바이트를 전송 합니다. 배열로부터 카피하는 바이트수가 이 버퍼내에 남아 있는 바이트수보다 많은 경우 (즉,length > remaining() 인 경우), 바이트는 일절 전송 되지 않고,BufferOverflowException
가 throw 됩니다.
그 이외의 경우, 이 메소드는, 지정된 배열의 지정된 오프셋(offset) 위치로부터 이 버퍼의 현재 위치에 length 분 바이트를 카피합니다. 그때마다, 현재의 버퍼의 위치가 length 두개증가합니다.
이 메소드를 dst.put(src, off, len) 의 형식에서 호출하면(자), 이하의 루프와 완전히 같은 결과가 됩니다.
for (int i = off; i < off + len; i++) dst.put(a[i]);다만, 현재의 버퍼내에 충분한 용량이 있는 것을 최초로 확인하는 동작은, 이 메소드에 고유합니다. 또, 이 메소드 쪽이 루프보다 쭉 효율적입니다.
src
- 바이트의 read처가 되는 배열offset
- 읽어들이는 최초의 바이트의 배열내의 오프셋(offset).
array.length 이하의 부가 아닌 값이 아니면 안되는length
- 주어진 배열로부터 읽어들이는 바이트수.
array.length - offset 이하의 부가 아닌 값이 아니면 안된다
BufferOverflowException
- 현재의 버퍼내에 남아 있는 용량이 부족한 경우
IndexOutOfBoundsException
- offset 파라미터와 length 파라미터의 전제 조건이 채워지지 않은 경우
ReadOnlyBufferException
- 현재의 버퍼가 읽어들여 전용 버퍼인 경우public final ByteBuffer put(byte[] src)
이 메소드는, 소스가 되는 지정된 바이트 배열의 내용 전체를 이 버퍼에 전송 합니다. 이 메소드를 dst.put(a) 의 형식에서 호출하면(자), 이하의 호출과 같은 결과가 됩니다.
dst.put(a, 0, a.length)
BufferOverflowException
- 현재의 버퍼내에 남아 있는 용량이 부족한 경우
ReadOnlyBufferException
- 현재의 버퍼가 읽어들여 전용 버퍼인 경우public final boolean hasArray()
이 메소드의 반환값이 true 이면,array
메소드 및 arrayOffset
메소드를 안전하게 호출할 수가 있습니다.
Buffer
내의 hasArray
public final byte[] array()
현재의 버퍼의 컨텐츠로 변경을 더하면(자), 반환되는 배열의 컨텐츠도 변경됩니다. 그 역도 같습니다.
이 메소드를 호출하기 전에 hasArray
메소드를 호출해, 현재의 버퍼가 액세스 가능한 보조 배열을 가지고 있는 것을 확인합니다.
Buffer
내의 array
ReadOnlyBufferException
- 현재의 버퍼가 배열에 연동하고 있어, 게다가 읽어들여 전용인 경우
UnsupportedOperationException
- 현재의 버퍼가 액세스 가능한 배열을 이용하지 않는 경우public final int arrayOffset()
현재의 버퍼가 배열에 연동하고 있으면, 그 위치 p 가 배열의 인덱스 p + arrayOffset() 와 일치합니다.
이 메소드를 호출하기 전에 hasArray
메소드를 호출해, 현재의 버퍼가 액세스 가능한 보조 배열을 가지고 있는 것을 확인합니다.
Buffer
내의 arrayOffset
ReadOnlyBufferException
- 현재의 버퍼가 배열에 연동하고 있어, 게다가 읽어들여 전용인 경우
UnsupportedOperationException
- 현재의 버퍼가 액세스 가능한 배열을 이용하지 않는 경우public abstract ByteBuffer compact()
버퍼의 현재 위치로부터 리밋트까지의 사이에 바이트가 존재하는 경우, 이것들을 버퍼의 선두에 카피합니다. 즉, 인덱스 위치 p = position() 의 바이트가 인덱스 0 에 카피되어 인덱스 위치 p + 1 의 바이트가 인덱스 1 에 카피된다고 하는 것입니다. 인덱스 위치 limit() - 1 의 바이트가 인덱스 n = limit() - 1 - p 에 카피될 때까지, 같은 처리가 반복해집니다. 최종적으로 버퍼의 위치는 n+1 로 설정되어 리밋트는 용량의 값과 동일해집니다. 마크는 파기됩니다.
버퍼의 위치는, 0 은 아니고, 카피되는 바이트수로 동일해집니다. 따라서, 이 메소드를 호출한 뒤, 곧바로 다른 상대 「put」메소드를 호출할 수가 있습니다.
이 메소드는, 기입이 종료하지 않았던 경우에 버퍼로부터의 데이터의 기입을 실행하기 전에 호출합니다. 이하의 루프는, 버퍼 buf 를 사용해, 어느 채널로부터 다른 채널에 바이트를 카피합니다.
buf.clear(); // Prepare buffer for use while (in.read(buf) >= 0 || buf.position ! = 0) { buf.flip(); out.write(buf); buf.compact(); // In case of partial write }
ReadOnlyBufferException
- 현재의 버퍼가 읽어들여 전용 버퍼인 경우public abstract boolean isDirect()
Buffer
내의 isDirect
public String toString()
Object
내의 toString
public int hashCode()
byte 버퍼의 해시 코드는, 버퍼내에 남아 있는 나머지의 요소, 즉 position() ~ limit() - 1 의 요소인 만큼 의존합니다.
버퍼의 해시 코드는 컨텐츠 의존형입니다. 향후 버퍼의 컨텐츠가 변경되지 않는 것이 분명하지 않은 한, 버퍼를 해시 맵 그 외의 데이터 구조의 키로서 사용하는 것은 피해 주세요.
Object
내의 hashCode
Object.equals(java.lang.Object)
,
Hashtable
public boolean equals(Object ob)
2 개의 byte 버퍼는, 다음의 경우에 한해 등가입니다.
요소의 형태가 같다
버퍼내에 남아 있는 요소수가 같다
버퍼내에 남아 있는 요소의 순서 (개시 위치와는 무관계)가 각 점으로써 동일하다 (pointwise equal)
byte 버퍼가, 그 외의 형태의 객체와 등가가 될 것은 없습니다.
Object
내의 equals
ob
- 현재의 버퍼와 비교하는 객체
Object.hashCode()
,
Hashtable
public int compareTo(ByteBuffer that)
2 개의 byte 버퍼를 비교할 때는, 버퍼내에 남아 있는 요소의 순서가 사전순서에 비교됩니다. 이 때, 쌍방의 버퍼내에 남아 있는 순서의 개시 위치는 고려되지 않습니다.
이 때, 쌍방의 버퍼내에 남아 있는 순서의 개시 위치는 고려되지 않습니다.
Comparable <ByteBuffer >
내의 compareTo
that
- 비교 대상의 객체
public final ByteOrder order()
바이트 순서는, 복수 바이트의 값을 읽어낼 때나 기입할 때, 그리고 이 byte 버퍼의 뷰가 되는 버퍼를 작성할 경우에 사용합니다. 새롭게 작성된 byte 버퍼의 순서는 항상 BIG_ENDIAN
가 됩니다.
public final ByteBuffer order(ByteOrder bo)
bo
- 새로운 바이트 순서. BIG_ENDIAN
,
LITTLE_ENDIAN
의 언젠가
public abstract char getChar()
이 버퍼의 현재 위치로부터 2 바이트를 읽어들여, 현재의 바이트 순서에 따라, 이것들을 char 값로 변환합니다. 위치의 값은, 그때마다 2 두개증가합니다.
BufferUnderflowException
- 이 버퍼내에 남아 있는 바이트수가 2 바이트보다 적은 경우public abstract ByteBuffer putChar(char value)
이 버퍼의 현재 위치에, 현재의 바이트 순서에 따라, 지정된 char 값를 포함한 2 바이트를 기입합니다. 위치의 값은, 그때마다 2 두개증가합니다.
value
- 기입해지는 char 값
BufferOverflowException
- 이 버퍼내에 남아 있는 바이트수가 2 바이트보다 적은 경우
ReadOnlyBufferException
- 현재의 버퍼가 읽어들여 전용 버퍼인 경우public abstract char getChar(int index)
지정된 인덱스 위치에 있는 2 바이트를 읽어들여, 현재의 바이트 순서에 따라, 이것들을 char 값로 변환합니다.
index
- 바이트의 read 위치를 나타내는 인덱스
IndexOutOfBoundsException
- index 가 0 보다 작은 값인 경우, 또는 버퍼의 리밋트 이상인 경우,
-1public abstract ByteBuffer putChar(int index, char value)
이 버퍼의 지정된 인덱스 위치에, 현재의 바이트 순서에 따라, 지정된 char 값를 포함한 2 바이트를 기입합니다.
index
- 바이트의 기입처를 나타내는 인덱스value
- 기입해지는 char 값
IndexOutOfBoundsException
- index 가 0 보다 작은 값인 경우, 또는 버퍼의 리밋트 이상인 경우,
-1
ReadOnlyBufferException
- 현재의 버퍼가 읽어들여 전용 버퍼인 경우public abstract CharBuffer asCharBuffer()
새로운 버퍼의 컨텐츠는, 현재의 버퍼의 현재 위치로부터 시작됩니다. 현재의 버퍼의 컨텐츠로 변경을 더하면(자), 그 내용이 새로운 버퍼에 반영됩니다. 새로운 버퍼의 컨텐츠로 변경을 더하면(자), 그 내용이 현재의 버퍼에 반영됩니다. 2 개의 버퍼의 위치, 리밋트, 마크의 값은 각각 다릅니다.
새로운 버퍼의 위치는 0, 용량과 리밋트는 이 버퍼내에 남아 있는 바이트수의 것 1/2 이 됩니다. 마크는 정의되지 않습니다. 새로운 버퍼는, 현재의 버퍼가 다이렉트 버퍼인 경우에 한정해 다이렉트 버퍼가 됩니다. 또, 현재의 버퍼가 읽어내 전용 버퍼인 경우에 한정해 읽기 전용 버퍼가 됩니다.
public abstract short getShort()
이 버퍼의 현재 위치로부터 2 바이트를 읽어들여, 현재의 바이트 순서에 따라, 이것들을 short 치로 변환합니다. 위치의 값은, 그때마다 2 두개증가합니다.
BufferUnderflowException
- 이 버퍼내에 남아 있는 바이트수가 2 바이트보다 적은 경우public abstract ByteBuffer putShort(short value)
이 버퍼의 현재 위치에, 현재의 바이트 순서에 따라, 지정된 short 치를 포함한 2 바이트를 기입합니다. 위치의 값은, 그때마다 2 두개증가합니다.
value
- 기입해지는 short 치
BufferOverflowException
- 이 버퍼내에 남아 있는 바이트수가 2 바이트보다 적은 경우
ReadOnlyBufferException
- 현재의 버퍼가 읽어들여 전용 버퍼인 경우public abstract short getShort(int index)
지정된 인덱스 위치에 있는 2 바이트를 읽어들여, 현재의 바이트 순서에 따라, 이것들을 short 치로 변환합니다.
index
- 바이트의 read 위치를 나타내는 인덱스
IndexOutOfBoundsException
- index 가 0 보다 작은 값인 경우, 또는 버퍼의 리밋트 이상인 경우,
-1public abstract ByteBuffer putShort(int index, short value)
이 버퍼의 지정된 인덱스 위치에, 현재의 바이트 순서에 따라, 지정된 short 치를 포함한 2 바이트를 기입합니다.
index
- 바이트의 기입처를 나타내는 인덱스value
- 기입해지는 short 치
IndexOutOfBoundsException
- index 가 0 보다 작은 값인 경우, 또는 버퍼의 리밋트 이상인 경우,
-1
ReadOnlyBufferException
- 현재의 버퍼가 읽어들여 전용 버퍼인 경우public abstract ShortBuffer asShortBuffer()
새로운 버퍼의 컨텐츠는, 현재의 버퍼의 현재 위치로부터 시작됩니다. 현재의 버퍼의 컨텐츠로 변경을 더하면(자), 그 내용이 새로운 버퍼에 반영됩니다. 새로운 버퍼의 컨텐츠로 변경을 더하면(자), 그 내용이 현재의 버퍼에 반영됩니다. 2 개의 버퍼의 위치, 리밋트, 마크의 값은 각각 다릅니다.
새로운 버퍼의 위치는 0, 용량과 리밋트는 이 버퍼내에 남아 있는 바이트수의 것 1/2 이 됩니다. 마크는 정의되지 않습니다. 새로운 버퍼는, 현재의 버퍼가 다이렉트 버퍼인 경우에 한정해 다이렉트 버퍼가 됩니다. 또, 현재의 버퍼가 읽어내 전용 버퍼인 경우에 한정해 읽기 전용 버퍼가 됩니다.
public abstract int getInt()
이 버퍼의 현재 위치로부터 4 바이트를 읽어들여, 현재의 바이트 순서에 따라, 이것들을 int 치로 변환합니다. 위치의 값은, 그때마다 4 두개증가합니다.
BufferUnderflowException
- 이 버퍼내에 남아 있는 바이트수가 4 바이트보다 적은 경우public abstract ByteBuffer putInt(int value)
이 버퍼의 현재 위치에, 현재의 바이트 순서에 따라, 지정된 int 치를 포함한 4 바이트를 기입합니다. 위치의 값은, 그때마다 4 두개증가합니다.
value
- 기입해지는 int 치
BufferOverflowException
- 이 버퍼내에 남아 있는 바이트수가 4 바이트보다 적은 경우
ReadOnlyBufferException
- 현재의 버퍼가 읽어들여 전용 버퍼인 경우public abstract int getInt(int index)
지정된 인덱스 위치에 있는 4 바이트를 읽어들여, 현재의 바이트 순서에 따라, 이것들을 int 치로 변환합니다.
index
- 바이트의 read 위치를 나타내는 인덱스
IndexOutOfBoundsException
- index 가 0 보다 작은 값인 경우, 또는 버퍼의 리밋트 이상인 경우,
-3public abstract ByteBuffer putInt(int index, int value)
이 버퍼의 지정된 인덱스 위치에, 현재의 바이트 순서에 따라, 지정된 int 치를 포함한 4 바이트를 기입합니다.
index
- 바이트의 기입처를 나타내는 인덱스value
- 기입해지는 int 치
IndexOutOfBoundsException
- index 가 0 보다 작은 값인 경우, 또는 버퍼의 리밋트 이상인 경우,
-3
ReadOnlyBufferException
- 현재의 버퍼가 읽어들여 전용 버퍼인 경우public abstract IntBuffer asIntBuffer()
새로운 버퍼의 컨텐츠는, 현재의 버퍼의 현재 위치로부터 시작됩니다. 현재의 버퍼의 컨텐츠로 변경을 더하면(자), 그 내용이 새로운 버퍼에 반영됩니다. 새로운 버퍼의 컨텐츠로 변경을 더하면(자), 그 내용이 현재의 버퍼에 반영됩니다. 2 개의 버퍼의 위치, 리밋트, 마크의 값은 각각 다릅니다.
새로운 버퍼의 위치는 0, 용량과 리밋트는 이 버퍼내에 남아 있는 바이트수의 것 1/4 이 됩니다. 마크는 정의되지 않습니다. 새로운 버퍼는, 현재의 버퍼가 다이렉트 버퍼인 경우에 한정해 다이렉트 버퍼가 됩니다. 또, 현재의 버퍼가 읽어내 전용 버퍼인 경우에 한정해 읽기 전용 버퍼가 됩니다.
public abstract long getLong()
이 버퍼의 현재 위치로부터 8 바이트를 읽어들여, 현재의 바이트 순서에 따라, 이것들을 long 치로 변환합니다. 위치의 값은, 그때마다 8 두개증가합니다.
BufferUnderflowException
- 이 버퍼내에 남아 있는 바이트수가 8 바이트보다 적은 경우public abstract ByteBuffer putLong(long value)
이 버퍼의 현재 위치에, 현재의 바이트 순서에 따라, 지정된 long 치를 포함한 8 바이트를 기입합니다. 위치의 값은, 그때마다 8 두개증가합니다.
value
- 기입해지는 long 치
BufferOverflowException
- 이 버퍼내에 남아 있는 바이트수가 8 바이트보다 적은 경우
ReadOnlyBufferException
- 현재의 버퍼가 읽어들여 전용 버퍼인 경우public abstract long getLong(int index)
지정된 인덱스 위치에 있는 8 바이트를 읽어들여, 현재의 바이트 순서에 따라, 이것들을 long 치로 변환합니다.
index
- 바이트의 read 위치를 나타내는 인덱스
IndexOutOfBoundsException
- index 가 0 보다 작은 값인 경우, 또는 버퍼의 리밋트 이상인 경우,
-7public abstract ByteBuffer putLong(int index, long value)
이 버퍼의 지정된 인덱스 위치에, 현재의 바이트 순서에 따라, 지정된 long 치를 포함한 8 바이트를 기입합니다.
index
- 바이트의 기입처를 나타내는 인덱스value
- 기입해지는 long 치
IndexOutOfBoundsException
- index 가 0 보다 작은 값인 경우, 또는 버퍼의 리밋트 이상인 경우,
-7
ReadOnlyBufferException
- 현재의 버퍼가 읽어들여 전용 버퍼인 경우public abstract LongBuffer asLongBuffer()
새로운 버퍼의 컨텐츠는, 현재의 버퍼의 현재 위치로부터 시작됩니다. 현재의 버퍼의 컨텐츠로 변경을 더하면(자), 그 내용이 새로운 버퍼에 반영됩니다. 새로운 버퍼의 컨텐츠로 변경을 더하면(자), 그 내용이 현재의 버퍼에 반영됩니다. 2 개의 버퍼의 위치, 리밋트, 마크의 값은 각각 다릅니다.
새로운 버퍼의 위치는 0, 용량과 리밋트는 이 버퍼내에 남아 있는 바이트수의 것 1/8 이 됩니다. 마크는 정의되지 않습니다. 새로운 버퍼는, 현재의 버퍼가 다이렉트 버퍼인 경우에 한정해 다이렉트 버퍼가 됩니다. 또, 현재의 버퍼가 읽어내 전용 버퍼인 경우에 한정해 읽기 전용 버퍼가 됩니다.
public abstract float getFloat()
이 버퍼의 현재 위치로부터 4 바이트를 읽어들여, 현재의 바이트 순서에 따라, 이것들을 float 치로 변환합니다. 위치의 값은, 그때마다 4 두개증가합니다.
BufferUnderflowException
- 이 버퍼내에 남아 있는 바이트수가 4 바이트보다 적은 경우public abstract ByteBuffer putFloat(float value)
이 버퍼의 현재 위치에, 현재의 바이트 순서에 따라, 지정된 float 치를 포함한 4 바이트를 기입합니다. 위치의 값은, 그때마다 4 두개증가합니다.
value
- 기입해지는 float 치
BufferOverflowException
- 이 버퍼내에 남아 있는 바이트수가 4 바이트보다 적은 경우
ReadOnlyBufferException
- 현재의 버퍼가 읽어들여 전용 버퍼인 경우public abstract float getFloat(int index)
지정된 인덱스 위치에 있는 4 바이트를 읽어들여, 현재의 바이트 순서에 따라, 이것들을 float 치로 변환합니다.
index
- 바이트의 read 위치를 나타내는 인덱스
IndexOutOfBoundsException
- index 가 0 보다 작은 값인 경우, 또는 버퍼의 리밋트 이상인 경우,
-3public abstract ByteBuffer putFloat(int index, float value)
이 버퍼의 지정된 인덱스 위치에, 현재의 바이트 순서에 따라, 지정된 float 치를 포함한 4 바이트를 기입합니다.
index
- 바이트의 기입처를 나타내는 인덱스value
- 기입해지는 float 치
IndexOutOfBoundsException
- index 가 0 보다 작은 값인 경우, 또는 버퍼의 리밋트 이상인 경우,
-3
ReadOnlyBufferException
- 현재의 버퍼가 읽어들여 전용 버퍼인 경우public abstract FloatBuffer asFloatBuffer()
새로운 버퍼의 컨텐츠는, 현재의 버퍼의 현재 위치로부터 시작됩니다. 현재의 버퍼의 컨텐츠로 변경을 더하면(자), 그 내용이 새로운 버퍼에 반영됩니다. 새로운 버퍼의 컨텐츠로 변경을 더하면(자), 그 내용이 현재의 버퍼에 반영됩니다. 2 개의 버퍼의 위치, 리밋트, 마크의 값은 각각 다릅니다.
새로운 버퍼의 위치는 0, 용량과 리밋트는 이 버퍼내에 남아 있는 바이트수의 것 1/4 이 됩니다. 마크는 정의되지 않습니다. 새로운 버퍼는, 현재의 버퍼가 다이렉트 버퍼인 경우에 한정해 다이렉트 버퍼가 됩니다. 또, 현재의 버퍼가 읽어내 전용 버퍼인 경우에 한정해 읽기 전용 버퍼가 됩니다.
public abstract double getDouble()
이 버퍼의 현재 위치로부터 8 바이트를 읽어들여, 현재의 바이트 순서에 따라, 이것들을 double 치로 변환합니다. 위치의 값은, 그때마다 8 두개증가합니다.
BufferUnderflowException
- 이 버퍼내에 남아 있는 바이트수가 8 바이트보다 적은 경우public abstract ByteBuffer putDouble(double value)
이 버퍼의 현재 위치에, 현재의 바이트 순서에 따라, 지정된 double 치를 포함한 8 바이트를 기입합니다. 위치의 값은, 그때마다 8 두개증가합니다.
value
- 기입해지는 double 치
BufferOverflowException
- 이 버퍼내에 남아 있는 바이트수가 8 바이트보다 적은 경우
ReadOnlyBufferException
- 현재의 버퍼가 읽어들여 전용 버퍼인 경우public abstract double getDouble(int index)
지정된 인덱스 위치에 있는 8 바이트를 읽어들여, 현재의 바이트 순서에 따라, 이것들을 double 치로 변환합니다.
index
- 바이트의 read 위치를 나타내는 인덱스
IndexOutOfBoundsException
- index 가 0 보다 작은 값인 경우, 또는 버퍼의 리밋트 이상인 경우,
-7public abstract ByteBuffer putDouble(int index, double value)
이 버퍼의 지정된 인덱스 위치에, 현재의 바이트 순서에 따라, 지정된 double 치를 포함한 8 바이트를 기입합니다.
index
- 바이트의 기입처를 나타내는 인덱스value
- 기입해지는 double 치
IndexOutOfBoundsException
- index 가 0 보다 작은 값인 경우, 또는 버퍼의 리밋트 이상인 경우,
-7
ReadOnlyBufferException
- 현재의 버퍼가 읽어들여 전용 버퍼인 경우public abstract DoubleBuffer asDoubleBuffer()
새로운 버퍼의 컨텐츠는, 현재의 버퍼의 현재 위치로부터 시작됩니다. 현재의 버퍼의 컨텐츠로 변경을 더하면(자), 그 내용이 새로운 버퍼에 반영됩니다. 새로운 버퍼의 컨텐츠로 변경을 더하면(자), 그 내용이 현재의 버퍼에 반영됩니다. 2 개의 버퍼의 위치, 리밋트, 마크의 값은 각각 다릅니다.
새로운 버퍼의 위치는 0, 용량과 리밋트는 이 버퍼내에 남아 있는 바이트수의 것 1/8 이 됩니다. 마크는 정의되지 않습니다. 새로운 버퍼는, 현재의 버퍼가 다이렉트 버퍼인 경우에 한정해 다이렉트 버퍼가 됩니다. 또, 현재의 버퍼가 읽어내 전용 버퍼인 경우에 한정해 읽기 전용 버퍼가 됩니다.
|
JavaTM Platform Standard Ed. 6 |
|||||||||
앞의 클래스 다음의 클래스 | 프레임 있어 프레임 없음 | |||||||||
개요: 상자 | 필드 | 생성자 | 메소드 | 상세: 필드 | 생성자 | 메소드 |
Copyright 2006 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms . Documentation Redistribution Policy 도 참조해 주세요.