|
JavaTM Platform Standard Ed. 6 |
|||||||||
전의 클래스 다음의 클래스 | 프레임 있어 프레임 없음 | |||||||||
개요: 상자 | 필드 | 생성자 | 메소드 | 상세: 필드 | 생성자 | 메소드 |
java.lang.Objectjava.nio.Buffer
public abstract class Buffer
특정의 원시형 데이터의 컨테이너입니다.
버퍼는, 특정의 원시형 요소의 리니어로 유한의 순서입니다. 컨텐츠 외에, 용량, 리밋트, 위치라고 하는 필수 프로퍼티이 있습니다.
「용량」은, 그 버퍼에 포함되는 요소수에 의해 결정됩니다. 용량의 값은 고정으로, 반드시 정의 값이 됩니다.
「리밋트」는, 읽어들여 또는 기입을 행해서는 안 되는 최초의 요소의 인덱스입니다. 용량 이하의 정의 값이 됩니다.
「위치」는, 다음에 읽어들여 또는 기입을 실시하는 요소의 인덱스입니다. 리밋트 이하의 정의 값이 됩니다.
비불형의 원시형에는, 이 클래스의 서브 클래스가 1 개씩 할당할 수 있고 있습니다.
이 클래스의 서브 클래스는, 각각 다음의 2 개의 카테고리에 해당하는 「get」 및 「put」를 정의합니다.
「상대」조작. 현재 위치로부터 1 개 이상의 요소의 읽어들여 또는 기입을 실시해, 전송 된 요소의 수만큼 위치를 증가합니다. 요구된 전송이 리밋트를 넘는 경우, 상대 「get」는
BufferUnderflowException
를, 상대 「put」는BufferOverflowException
를 throw 합니다. 어느 쪽의 경우도, 데이터는 일절 전송 되지 않습니다.「절대」조작. 명시적인 요소 인덱스를 사용하기 위해(때문에), 위치는 변화하지 않습니다. 인덱스 인수가 리밋트를 넘는 경우, 절대 「get」, 절대 「put」라고도에
IndexOutOfBoundsException
를 throw 합니다.
적절한 채널의 입출력 조작을 실시하면, 데이터의 전송 (버퍼와의 주고받아)은 가능합니다. 이 조작은, 항상 현재 위치에 대해서 상대적으로 행해집니다.
버퍼의 「마크」는,reset
메소드를 실행했을 때에 돌아오는 위치를 지정하는 인덱스입니다. 정의되어 있지 않은 경우도 있습니다만, 정의되고 있는 경우는 반드시 위치 이하의 정의 값이 됩니다. 위치나 리밋트의 값이 마크의 값보다 작은 경우, 마크는 파기됩니다. 마크가 정의되어 있지 않은 상태로 reset
메소드를 호출하면(자),InvalidMarkException
가 throw 됩니다.
다음의 인 변형은, 마크, 위치, 리밋트, 용량의 값을 나타냅니다.
0 <= mark <= position <= limit <= capacity
새롭게 작성된 버퍼의 위치는 항상 0, 마크는 미정도리입니다. 리밋트의 초기치는 0 인가, 버퍼의 구축 방법이나 종류에 따라서는 그 이외의 값이 됩니다. 일반적으로, 버퍼의 초기 컨텐츠는 미정도리입니다.
위치, 리밋트, 용량의 값에 액세스 하는 메소드나, 마크나 리셋를 실시하는 메소드와 같게, 이 클래스도 버퍼에 대한 다음과 같은 조작을 정의합니다.
clear()
는, 새로운 일련의 채널 read 조작 또는 상대 「put」조작을 위해서(때문에) 버퍼를 준비합니다. 리밋트를 용량의 값으로 설정해, 위치를 0 으로 설정합니다.
flip()
는, 신규 채널 기입 순서 (상대 「get」)를 위해서(때문에) 버퍼를 준비합니다. 리밋트의 값을 현재 위치의 값에 맞춘 뒤, 위치의 값을 0 으로 합니다.
rewind()
는, 벌써 버퍼 포함되고 있는 데이터를 재차 읽어들일 수 있도록(듯이), 버퍼를 준비합니다. 리밋트의 값은 그대로, 위치의 값을 0 으로 합니다.
모든 버퍼는 읽어들여 가능합니다만, 기입도 가능하다라고는 한정하지 않습니다. 각 버퍼 클래스의 변이 메소드는 「생략 가능한 조작」으로 지정되고 있어 읽기 전용 버퍼상에서 불려 가면(자) ReadOnlyBufferException
를 throw 합니다. 읽기 전용 버퍼의 컨텐츠는 변경할 수 없습니다. 그러나, 마크, 위치, 리밋트의 값은 변경 가능합니다. 버퍼가 읽어내 전용일지 어떨지는,isReadOnly
메소드를 호출하는 것으로 판단할 수 있습니다.
버퍼는, 복수의 병행 thread에 의한 사용에 대해 안전하지는 않습니다. 복수의 thread로 사용하는 경우는, 적절한 동기 처리에 의해 버퍼에의 액세스를 제어할 필요가 있습니다.
이 클래스의 메소드중 반환값을 돌려주지 않는 것은, 자신을 호출한 버퍼의 정보를 돌려줍니다. 이것을 응용해, 메소드 호출을 연쇄시킬 수가 있습니다. 예를 들어 다음과 같은 문장이 있다고 합시다.
이것들은, 보다 컴팩트한 형식의 일행으로 옮겨놓을 수 있습니다.b.flip(); b.position(23); b.limit(42);
b.flip(). position(23). limit(42);
메소드의 개요 | |
---|---|
abstract Object |
array ()
현재의 버퍼를 보조하는 배열을 돌려줍니다 (옵션). |
abstract int |
arrayOffset ()
현재의 버퍼의 보조 배열내에 있는, 이 버퍼의 최초의 요소의 오프셋(offset)를 돌려줍니다 (옵션). |
int |
capacity ()
이 버퍼의 용량을 돌려줍니다. |
Buffer |
clear ()
이 버퍼를 클리어 합니다. |
Buffer |
flip ()
이 버퍼를 플립 (반전) 합니다. |
abstract boolean |
hasArray ()
현재의 버퍼가 액세스 가능한 배열에 연동할지 어떨지를 판단합니다. |
boolean |
hasRemaining ()
현재 위치로부터 리밋트까지 요소가 1 개에서도 존재할지 어떨지를 판단합니다. |
abstract boolean |
isDirect ()
이 버퍼가다이렉트 버퍼일지 어떨지를 판단합니다. |
abstract boolean |
isReadOnly ()
이 버퍼가 읽어내 전용일지 어떨지를 판단합니다. |
int |
limit ()
이 버퍼의 리밋트를 돌려줍니다. |
Buffer |
limit (int newLimit)
이 버퍼의 리밋트를 설정합니다. |
Buffer |
mark ()
이 버퍼의 현재 위치에 마크를 설정합니다. |
int |
position ()
이 버퍼의 위치를 돌려줍니다. |
Buffer |
position (int newPosition)
이 버퍼의 위치를 설정합니다. |
int |
remaining ()
현재 위치로부터 리밋트까지 존재하는 요소의 수를 돌려줍니다. |
Buffer |
reset ()
버퍼의 위치를 이전에 마크 한 위치에 되돌립니다. |
Buffer |
rewind ()
이 버퍼를 되감기 (되감아) 합니다. |
클래스 java.lang. Object 로부터 상속된 메소드 |
---|
clone , equals , finalize , getClass , hashCode , notify , notifyAll , toString , wait , wait , wait |
메소드의 상세 |
---|
public final int capacity()
public final int position()
public final Buffer position(int newPosition)
newPosition
- 새로운 위치의 값은, 현재의 리밋트 이하의 부가 아닌 값이 아니면 안된다
IllegalArgumentException
- newPosition 의 전제 조건이 채워지지 않은 경우public final int limit()
public final Buffer limit(int newLimit)
newLimit
- 새로운 리밋트치는, 이 버퍼의 용량 이하의 부가 아닌 값이 아니면 안된다
IllegalArgumentException
- newLimit 의 전제 조건이 채워지지 않은 경우public final Buffer mark()
public final Buffer reset()
이 메소드를 호출해도, 마크의 값은 변경되지 않습니다. 마크가 파기되는 일도 없습니다.
InvalidMarkException
- 마크가 설정되어 있지 않은 경우public final Buffer clear()
일련의 채널 read 조작 또는 「put」조작을 사용해 이 버퍼에 데이터를 포함하기 전에, 이 메소드를 호출합니다. 다음에 예를 나타냅니다.
buf.clear(); // Prepare buffer for reading in.read(buf); // Read data
이 메소드는 버퍼내의 데이터를 실제로 소거하는 것은 아닙니다. 그러나, 그러한 상황으로 사용되기 (위해)때문에, 클리어 (clear)라고 명명해지고 있습니다.
public final Buffer flip()
채널 read 조작 (put)뒤, 이 메소드를 호출해 채널 기입 조작 (상대 「get」)의 준비를 실시합니다. 다음에 예를 나타냅니다.
buf.put(magic); // Prepend header in.read(buf); // Read data into rest of buffer buf.flip(); // Flip buffer out.write(buf); // Write header + data to channel
어느 장소로부터 다른 장소에 데이터를 전송 할 때, 이 메소드를 compact
메소드와 조합해 사용하는 일이 있습니다.
public final Buffer rewind()
이 메소드는, 리밋트를 올바르게 설정한 뒤, 채널 기입 조작 (get)전에 호출합니다. 다음에 예를 나타냅니다.
out.write(buf); // Write remaining data buf.rewind(); // Rewind buffer buf.get(array); // Copy data into array
public final int remaining()
public final boolean hasRemaining()
public abstract boolean isReadOnly()
public abstract boolean hasArray()
이 메소드의 반환값이 true 이면,array
메소드 및 arrayOffset
메소드를 안전하게 호출할 수가 있습니다.
public abstract Object array()
이 메소드는, 배열을 이용하는 버퍼를 native code에 의해 효율적으로 건네주기 위해서(때문에) 사용합니다. 구상 서브 클래스는, 이 메소드의 반환값으로서보다 강하고 형지를 무늬를 박아서 염색한 것 된 값을 돌려줍니다.
현재의 버퍼의 컨텐츠로 변경을 더하면(자), 반환되는 배열의 컨텐츠도 변경됩니다. 그 역도 같습니다.
이 메소드를 호출하기 전에 hasArray
메소드를 호출해, 현재의 버퍼가 액세스 가능한 보조 배열을 가지고 있는 것을 확인합니다.
ReadOnlyBufferException
- 현재의 버퍼가 배열에 연동하고 있어, 게다가 읽어들여 전용인 경우
UnsupportedOperationException
- 현재의 버퍼가 액세스 가능한 배열을 이용하지 않는 경우public abstract int arrayOffset()
현재의 버퍼가 배열에 연동하고 있으면, 그 위치 p 가 배열의 인덱스 p + arrayOffset() 와 일치합니다.
이 메소드를 호출하기 전에 hasArray
메소드를 호출해, 현재의 버퍼가 액세스 가능한 보조 배열을 가지고 있는 것을 확인합니다.
ReadOnlyBufferException
- 현재의 버퍼가 배열에 연동하고 있어, 게다가 읽어들여 전용인 경우
UnsupportedOperationException
- 현재의 버퍼가 액세스 가능한 배열을 이용하지 않는 경우public abstract boolean isDirect()
|
JavaTM Platform Standard Ed. 6 |
|||||||||
전의 클래스 다음의 클래스 | 프레임 있어 프레임 없음 | |||||||||
개요: 상자 | 필드 | 생성자 | 메소드 | 상세: 필드 | 생성자 | 메소드 |
Copyright 2006 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms . Documentation Redistribution Policy 도 참조해 주세요.