JavaTM Platform
Standard Ed. 6

java.nio.channels
클래스 SelectableChannel

java.lang.Object 
  상위를 확장 java.nio.channels.spi.AbstractInterruptibleChannel 
      상위를 확장 java.nio.channels.SelectableChannel
모든 구현된 인터페이스:
Closeable , Channel , InterruptibleChannel
직계의 기존의 서브 클래스:
AbstractSelectableChannel


public abstract class SelectableChannel
extends AbstractInterruptibleChannel
implements Channel

Selector 경유로 다중화할 수 있는 채널입니다.

셀렉터로 사용하기 위해서는, 우선,register 메소드를 사용해 이 클래스의 인스턴스를 등록할 필요가 있습니다. 이 메소드는, 채널이 셀렉터에 등록된 것을 나타내는 새로운 SelectionKey 객체를 돌려줍니다.

셀렉터에 등록된 채널은, 등록을 해제할 때까지 등록된 채로 있습니다. 등록을 해제하는데는, 셀렉터에 의해 채널에 할당할 수 있었던 자원을 해제할 필요가 있습니다.

채널의 등록을 직접 해제할 수 없습니다. 그 대신에, 등록을 나타내는 키를 취소합니다. 키를 취소하려면 , 셀렉터가 다음의 선택을 행하고 있는 동안에 채널의 등록을 해제합니다. cancel 메소드의 호출에 의해, 키를 명시적으로 취소할 수가 있습니다. close 메소드의 호출해, 또는 채널상의 입출력 조작중에 블록 된 thread에 대한 인터럽트에 의해 채널을 클로즈 하면(자), 필연적으로, 그 채널의 모든 키가 삭제됩니다.

셀렉터 자체를 클로즈 하면(자), 채널의 등록이 해제되어 그 등록을 나타내고 있던 키도 즉석에서 무효가 됩니다.

채널은 특정의 셀렉터에 대해서, 많아도 한 번 밖에 등록할 수 없습니다.

채널이 1 개 이상의 셀렉터에 등록되지 않은지 어떤지를 확인하려면 ,isRegistered 메소드를 호출합니다.

선택 가능 채널은, 복수의 병행 thread로 안전하게 사용할 수 있습니다.

블록 모드

선택 가능 채널은, 블록 모드나 비블록 모드가 됩니다. 블록 모드의 경우, 채널상에서 불려 간 입출력 조작은, 전의 조작이 완료할 때까지 블록 됩니다. 비블록 모드의 경우, 입출력 조작은 블록 되지 않고, 요구된 바이트수보다 적은 바이트수가 전송 됩니다. 바이트가 일절 전송 되지 않는 경우도 있습니다. 선택 가능 채널이 블록 모드일지 어떨지는,
isBlocking 메소드를 호출하는 것으로 판단할 수 있습니다.

새롭게 작성된 선택 가능 채널은, 항상 블록 모드가 됩니다. 비블록 모드는, 셀렉터 베이스의 다중화와 함께 가장 유용합니다. 셀렉터에 등록하기 전에, 채널을 비블록 모드로 해, 등록 해제까지 그대로 해 둘 필요가 있습니다.

도입된 버젼:
1.4
관련 항목:
SelectionKey , Selector

생성자 의 개요
protected SelectableChannel ()
          이 클래스의 새로운 인스턴스를 초기화합니다.
 
메소드의 개요
abstract  Object blockingLock ()
          configureBlocking 메소드와 register 메소드가 동기 하는 객체를 돌려줍니다.
abstract  SelectableChannel configureBlocking (boolean block)
          이 채널의 블록 모드를 조정합니다.
abstract  boolean isBlocking ()
          이 채널상의 개개의 입출력 조작이 전의 입출력 조작이 완료할 때까지 블록 될지 어떨지를 판단합니다.
abstract  boolean isRegistered ()
          현재 이 채널이 셀렉터에 등록되어 있는지 어떤지를 판단합니다.
abstract  SelectionKey keyFor (Selector  sel)
          채널이 지정된 셀렉터에 등록되어 있는 것을 나타내는 키를 가져옵니다.
abstract  SelectorProvider provider ()
          이 채널의 작성원프로바이더를 돌려줍니다.
 SelectionKey register (Selector  sel, int ops)
          이 채널이 지정된 셀렉터에 등록해, 선택 키를 돌려줍니다.
abstract  SelectionKey register (Selector  sel, int ops, Object  att)
          이 채널이 지정된 셀렉터에 등록해, 선택 키를 돌려줍니다.
abstract  int validOps ()
          이 채널의 지원되고 있는 조작을 식별하는조작 세트를 돌려줍니다.
 
클래스 java.nio.channels.spi. AbstractInterruptibleChannel 로부터 상속된 메소드
begin , close , end , implCloseChannel , isOpen
 
클래스 java.lang. Object 로부터 상속된 메소드
clone , equals , finalize , getClass , hashCode , notify , notifyAll , toString , wait , wait , wait
 
인터페이스 java.nio.channels. Channel 로부터 상속된 메소드
close , isOpen
 

생성자 의 상세

SelectableChannel

protected SelectableChannel()
이 클래스의 새로운 인스턴스를 초기화합니다.

메소드의 상세

provider

public abstract SelectorProvider  provider()
이 채널의 작성원프로바이더를 돌려줍니다.

반환값:
이 채널의 작성원프로바이더

validOps

public abstract int validOps()
이 채널의 지원되고 있는 조작을 식별하는조작 세트를 돌려줍니다. 이 정수치로 설정되어 있는 비트는, 이 채널에 있어 유효한 조작을 나타냅니다. 이 메소드는, 지정된 구상 채널 클래스에 대해서, 항상 같은 값을 돌려줍니다.

반환값:
유효한 조작 세트

isRegistered

public abstract boolean isRegistered()
현재 이 채널이 셀렉터에 등록되어 있는지 어떤지를 판단합니다. 새롭게 작성된 채널은 등록되어 있지 않습니다.

키의 취소로부터 채널의 등록 해제까지의 사이에 발생하는 필연적인 지연이기 때문에, 키를 모두 취소해도, 당분간의 사이 채널의 등록은 해제되지 않습니다. 채널을 클로즈 했을 때도 같습니다.

반환값:
이 채널이 등록되어 있는 경우에 한해 true

keyFor

public abstract SelectionKey  keyFor(Selector  sel)
채널이 지정된 셀렉터에 등록되어 있는 것을 나타내는 키를 가져옵니다.

반환값:
전회 이 채널이 지정된 셀렉터에 등록했을 때 반환된 키. 현재 이 채널이 지정된 셀렉터에 등록되지 않은 경우는 null

register

public abstract SelectionKey  register(Selector  sel,
                                      int ops,
                                      Object  att)
                               throws ClosedChannelException 
이 채널이 지정된 셀렉터에 등록해, 선택 키를 돌려줍니다.

현재 이 채널이 지정된 셀렉터에 등록되어 있는 경우, 이 등록을 나타내는 선택 키가 돌려주어집니다. 키의 대상 리스트는,interestOps(int) 메소드를 호출했을 경우와 같이 ops 로 변경되고 있습니다. att 인수의 값이 null 이외의 경우, 키의 첨부는 그 값으로 설정되어 있습니다. 키가 벌써 삭제되고 있는 경우는,CancelledKeyException 가 throw 됩니다.

그 이외의 경우, 이 채널은 지정된 셀렉터에 아직 등록되어 있지 않습니다. 등록 처리뒤, 새롭게 생성된 키가 돌려주어집니다. 키의 대상 리스트의 초기치는 ops, 첨부는 att 가 됩니다.

이 메소드는 언제라도 호출할 수가 있습니다. 이 메소드의 호출중, 또는 configureBlocking 메소드의 호출중에 중복 해 이 메소드를 호출했을 경우, 새롭게 호출한 메소드는 최초의 메소드의 처리가 완료할 때까지 블록 됩니다. 그 후, 이 메소드와 셀렉터의 키 세트의 동기가 취해집니다. 이 때문에, 같은 셀렉터를 사용하는 다른 등록 또는 선택 처리와 병행해 불려 갔을 경우, 이 메소드는 블록 됩니다.

이 조작의 실행중에 이 채널이 클로즈 했을 경우, 이 메소드로부터 반환되는 키는 삭제되어 무효가 됩니다.

파라미터:
sel - 이 채널의 등록처 셀렉터
ops - 결과적으로 얻을 수 있는 키의 대상 세트
att - 결과적으로 얻을 수 있는 키의 첨부. null 의 경우도 있다
반환값:
이 채널이 지정된 셀렉터에 등록되어 있는 것을 나타내는 키
예외:
ClosedChannelException - 이 채널이 클로즈 하고 있는 경우
IllegalBlockingModeException - 이 채널이 블록 모드의 경우
IllegalSelectorException - 이 채널의 작성원프로바이더가 지정된 셀렉터의 작성원프로바이더와 다른 경우
CancelledKeyException - 채널은 지정된 셀렉터에 등록되어 있지만, 대응하는 키가 벌써 삭제되고 있는 경우
IllegalArgumentException - ops 세트내의 비트가 이 채널로 지원되는 조작에 대응하고 있지 않는 경우 (set & ~validOps() ! = 0)

register

public final SelectionKey  register(Selector  sel,
                                   int ops)
                            throws ClosedChannelException 
이 채널이 지정된 셀렉터에 등록해, 선택 키를 돌려줍니다.

이 메소드를 다음의 형식에서 호출하면(자), 상기의 동작을 합니다.

sc.register(sel, ops)
다음의 호출과 정확하게 같은 동작이 됩니다.
sc. register (sel, ops, null)

파라미터:
sel - 이 채널의 등록처 셀렉터
ops - 결과적으로 얻을 수 있는 키의 대상 세트
반환값:
이 채널이 지정된 셀렉터에 등록되어 있는 것을 나타내는 키
예외:
ClosedChannelException - 이 채널이 클로즈 하고 있는 경우
IllegalBlockingModeException - 이 채널이 블록 모드의 경우
IllegalSelectorException - 이 채널의 작성원프로바이더가 지정된 셀렉터의 작성원프로바이더와 다른 경우
CancelledKeyException - 채널은 지정된 셀렉터에 등록되어 있지만, 대응하는 키가 벌써 삭제되고 있는 경우
IllegalArgumentException - ops 세트내의 비트가 이 채널로 지원되는 조작에 대응하고 있지 않는 경우 (set & ~validOps() ! = 0)

configureBlocking

public abstract SelectableChannel  configureBlocking(boolean block)
                                             throws IOException 
이 채널의 블록 모드를 조정합니다.

이 채널이 1 개 이상의 셀렉터에 등록되어 있는 경우, 블록 모드로 설정하려고 하면(자),IllegalBlockingModeException 가 throw 됩니다.

이 메소드는 언제라도 호출할 수가 있습니다. 새로운 블록 모드는, 이 메소드의 종료후에 개시된 입출력 조작인 만큼 영향을 미칩니다. 구현에 따라서는, 보류된 입출력 조작이 완료할 때까지 블록을 속행할 필요가 있습니다.

이 메소드 또는 register 메소드의 호출중에 이 메소드를 중복 해 호출했을 경우, 새롭게 불려 간 메소드는 최초의 처리가 완료할 때까지 블록 됩니다.

파라미터:
block - 이 채널이 블록 모드가 되는 경우는 true, 비블록 모드가 되는 경우는 false
반환값:
이 선택 가능 채널
예외:
ClosedChannelException - 이 채널이 클로즈 하고 있는 경우
IllegalBlockingModeException - blocktrue 로, 이 채널이 1 개 이상의 셀렉터에 등록되어 있는 경우
IOException - 입출력 에러가 발생했을 경우

isBlocking

public abstract boolean isBlocking()
이 채널상의 개개의 입출력 조작이 전의 입출력 조작이 완료할 때까지 블록 될지 어떨지를 판단합니다. 새롭게 작성된 채널은 항상 블록 모드입니다.

이 채널이 클로즈 하고 있는 경우, 이 메소드의 반환값은 특정되지 않습니다.

반환값:
이 채널이 블록 모드인 경우에 한해 true

blockingLock

public abstract Object  blockingLock()
configureBlocking 메소드와 register 메소드가 동기 하는 객체를 돌려줍니다. 이 기능은, 특정의 블록 모드를 단시간 보관 유지할 필요가 있는 어댑터를 구현하는 경우에 편리합니다.

반환값:
블록 모드의 락 객체

JavaTM Platform
Standard Ed. 6

버그의 보고와 기능의 요청
한층 더 자세한 API 레퍼런스 및 개발자 문서에 대해서는,Java SE 개발자용 문서를 참조해 주세요. 개발자전용의 상세한 해설, 개념의 개요, 용어의 정의, 버그의 회피책, 및 코드 실례가 포함되어 있습니다.

Copyright 2006 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms . Documentation Redistribution Policy 도 참조해 주세요.