JavaTM Platform
Standard Ed. 6

java.nio.channels
클래스 SelectionKey

java.lang.Object 
  상위를 확장 java.nio.channels.SelectionKey
직계의 기존의 서브 클래스:
AbstractSelectionKey


public abstract class SelectionKey
extends Object

SelectableChannelSelector 에 등록되어 있는 것을 나타내는 토큰입니다.

채널을 셀렉터에 등록할 때마다, 선택 키가 작성됩니다. 이 키는,cancel 메소드의 호출이나, 채널 또는 셀렉터의 클로즈에 의해 삭제될 때까지 유효합니다. 삭제된 키가 즉시 셀렉터로부터 삭제되는 것은 아닙니다. 삭제된 키는, 다음의 선택 조작이 실행될 때까지, 셀렉터가삭제된 키 세트내에 보관 유지됩니다. 키의 유효성은,isValid 메소드를 호출하는 것으로 확인할 수 있습니다.

선택 키에는, 정수치로 나타내진 2 개의 조작 세트가 있습니다. 조작 세트의 비트는, 키의 채널에 의해 지원되고 있는 선택 가능한 조작의 카테고리를 나타냅니다.

선택 키의 실행 가능 세트는, 그 채널이 있는 조작 카테고리를 실행할 수 있는 상태가 되어 있는 것을 나타냅니다. 다만, 이것은 단순한 힌트이며, thread가 블록 되는 일 없이 그 카테고리의 조작을 실행할 수 있는 것을 보증하는 것은 아닙니다. 일반적으로, 실행 가능 세트는, 선택 조작 완료 직후는 정확합니다만, 외부 이벤트나 대응하는 채널상에서 불려 가는 입출력 조작에 의해 부정확하게 될 가능성이 있습니다.

이 클래스는 기존의 모든 조작 세트 비트를 정의합니다만, 어느 비트가 지정된 채널에 의해 지원될까는, 정확하게는 채널의 종류에 따라서 다릅니다. SelectableChannel 의 개개의 서브 클래스는,validOps() 메소드를 정의해, 이 메소드는 채널에 의해 지원되는 조작만을 나타내는 세트를 돌려줍니다. 키의 채널에 의해 지원되어 있지 않은 조작 세트 비트를 설정 또는 테스트하려고 하면(자), 적절한 실행시 예외가 throw 됩니다.

많은 경우, 어플리케이션 고유의 데이터를 선택 키에 관련지을 필요가 있습니다. 예를 들어, 어느 프로토콜을 구현하기 위해서, 게다가 위프로토콜 상태를 나타내, 실행 가능 통지를 처리하는 객체가 이것에 해당합니다. 이 때문에, 선택 키는, 단일의 임의 객체를 키에 「첨부」하는 기능을 지원하고 있습니다. attach 메소드로 객체를 첨부한 뒤,attachment 메소드로 이 객체를 취득할 수 있습니다.

선택 키는 복수의 병행 thread로 안전하게 사용할 수 있습니다. 일반적으로, 대상 세트의 읽기 및 기입해 조작은, 셀렉터의 특정의 조작에 동기 합니다. 이 동기 처리의 방법은 구현에 따라서 다릅니다. 네이티브 구현에서는, 선택 조작의 실행중, 대상 세트의 읽기나 기입은 무기한으로 블록 됩니다. 고성능 구현에서는, 대상 세트의 읽기나 기입은, 블록 되었다고 해도 그저 단시간입니다. 어느 경우도, 선택 조작에는 항상, 이 조작을 개시한 시점에서 최신의 대상 세트의 값이 사용됩니다.

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

필드의 개요
static int OP_ACCEPT
          소켓 접수 조작용의 조작 세트 비트입니다.
static int OP_CONNECT
          소켓 접속 조작용의 조작 세트 비트입니다.
static int OP_READ
          read 조작용의 조작 세트 비트입니다.
static int OP_WRITE
          기입 조작용의 조작 세트 비트입니다.
 
생성자 의 개요
protected SelectionKey ()
          이 클래스의 인스턴스를 구축합니다.
 
메소드의 개요
 Object attach (Object  ob)
          이 키로 지정된 객체를 첨부합니다.
 Object attachment ()
          현재의 첨부 객체를 가져옵니다.
abstract  void cancel ()
          이 키의 셀렉터에의 등록을 해제하는 것을 요구합니다.
abstract  SelectableChannel channel ()
          작성된 이 키의 채널을 돌려줍니다.
abstract  int interestOps ()
          이 키의 대상 세트를 가져옵니다.
abstract  SelectionKey interestOps (int ops)
          이 키의 대상 세트가 지정된 값으로 합니다.
 boolean isAcceptable ()
          이 키의 채널이 새로운 소켓 접속을 받아들일 수 있는 상태가 되어 있는지 어떤지를 테스트합니다.
 boolean isConnectable ()
          이 키의 채널이 소켓 접속 조작을 올바르게 완료했는지 실패했는지를 테스트합니다.
 boolean isReadable ()
          이 키의 채널이 읽어들여 가능한 상태가 되어 있는지 어떤지를 테스트합니다.
abstract  boolean isValid ()
          이 키가 유효한지 어떤지를 판단합니다.
 boolean isWritable ()
          이 키의 채널이 기입해 가능한 상태가 되어 있는지 어떤지를 테스트합니다.
abstract  int readyOps ()
          이 키의 실행 가능 조작 세트를 가져옵니다.
abstract  Selector selector ()
          작성된 이 키의 셀렉터를 돌려줍니다.
 
클래스 java.lang. Object 로부터 상속된 메소드
clone , equals , finalize , getClass , hashCode , notify , notifyAll , toString , wait , wait , wait
 

필드의 상세

OP_READ

public static final int OP_READ
read 조작용의 조작 세트 비트입니다.

선택 조작을 시작할 때, 선택 키의 대상 세트에 OP_READ 가 포함되어 있다고 합니다. 대응하는 채널이 읽어들여 가능한 상태가 되어 있는지, 스트림의 마지막에 이르고 있는지, 다음의 read가 생기도록(듯이) 원격 종료 되고 있는지, 에러에 의해 일시정지하고 있는 것을 검출하면(자), 셀렉터는, 키의 실행 가능 조작 세트에 OP_READ 를 추가해, 이 키를 선택 키 세트에 추가합니다.

관련 항목:
정수 필드치

OP_WRITE

public static final int OP_WRITE
기입 조작용의 조작 세트 비트입니다.

선택 조작을 시작할 때, 선택 키의 대상 세트에 OP_WRITE 가 포함되어 있다고 합니다. 대응하는 채널이 기입해 가능한 상태가 되어 있는지, 다음의 기입을 할 수 있도록(듯이) 원격 종료 되고 있는지, 에러에 의해 일시정지하고 있는 것을 검출하면(자), 셀렉터는, 키의 실행 가능 조작 세트에 OP_WRITE 를 추가해, 이 키를 선택 키 세트에 추가합니다.

관련 항목:
정수 필드치

OP_CONNECT

public static final int OP_CONNECT
소켓 접속 조작용의 조작 세트 비트입니다.

선택 조작을 시작할 때, 선택 키의 대상 세트에 OP_CONNECT 가 포함되어 있다고 합니다. 대응하는 소켓 채널이 접속 순서를 완료할 수 있는 상태가 되어 있는지, 에러에 의해 일시정지하고 있는 것을 검출하면(자), 셀렉터는, 키의 실행 가능 조작 세트에 OP_CONNECT 를 추가해, 이 키를 선택 키 세트에 추가합니다.

관련 항목:
정수 필드치

OP_ACCEPT

public static final int OP_ACCEPT
소켓 접수 조작용의 조작 세트 비트입니다.

선택 조작을 시작할 때, 선택 키의 대상 세트에 OP_ACCEPT 가 포함되어 있다고 합니다. 대응하는 서버 소켓 채널이 다른 접속을 받아들일 수 있는 상태가 되어 있는지, 에러에 의해 일시정지하고 있는 것을 검출하면(자), 셀렉터는, 키의 실행 가능 조작 세트에 OP_ACCEPT 를 추가해, 이 키를 선택 키 세트에 추가합니다.

관련 항목:
정수 필드치
생성자 의 상세

SelectionKey

protected SelectionKey()
이 클래스의 인스턴스를 구축합니다.

메소드의 상세

channel

public abstract SelectableChannel  channel()
작성된 이 키의 채널을 돌려줍니다. 이 메소드는, 키가 삭제된 뒤도 채널을 돌려줍니다.

반환값:
이 키의 채널

selector

public abstract Selector  selector()
작성된 이 키의 셀렉터를 돌려줍니다. 이 메소드는, 키가 삭제된 뒤도 셀렉터를 돌려줍니다.

반환값:
이 키의 셀렉터

isValid

public abstract boolean isValid()
이 키가 유효한지 어떤지를 판단합니다.

키는, 작성된 시점으로부터, 삭제되는지, 채널 또는 셀렉터가 클로즈 할 때까지 유효합니다.

반환값:
이 키가 유효한 경우에 한해 true

cancel

public abstract void cancel()
이 키의 셀렉터에의 등록을 해제하는 것을 요구합니다. 종료시, 키는 무효가 되어, 셀렉터가 삭제된 키 세트에 추가됩니다. 이 키는, 다음의 선택 조작시에, 모든 셀렉터의 키 세트로부터 삭제됩니다.

이 키가 벌써 삭제되고 있는 경우는, 이 메소드를 호출해도 아무것도 일어나지 않습니다. 일단 삭제된 키는 이후 영구히 무효입니다.

이 메소드는 언제라도 호출할 수가 있습니다. 셀렉터가 삭제된 키 세트와의 동기가 취해지기 (위해)때문에, 같은 셀렉터를 사용하는 취소 조작 또는 선택 조작중에 병행해 불려 가면(자), 일시적으로 블록 됩니다.


interestOps

public abstract int interestOps()
이 키의 대상 세트를 가져옵니다.

반환되는 세트에는, 이 키의 채널에 있어 유효한 조작 비트만이 포함됩니다.

이 메소드는 언제라도 호출할 수가 있습니다. 블록 될지 어떨지, 된다고 하면(자) 어느 정도의 기간이 될까는, 구현에 따라서 다릅니다.

반환값:
이 키의 대상 세트
예외:
CancelledKeyException - 이 키가 삭제되었을 경우

interestOps

public abstract SelectionKey  interestOps(int ops)
이 키의 대상 세트가 지정된 값으로 합니다.

이 메소드는 언제라도 호출할 수가 있습니다. 블록 될지 어떨지, 된다고 하면(자) 어느 정도의 기간이 될까는, 구현에 따라서 다릅니다.

파라미터:
ops - 새로운 대상 세트
반환값:
이 선택 키
예외:
IllegalArgumentException - 세트내의 비트가 이 키의 채널로 지원되는 조작에 대응하고 있지 않는 경우 (set & ~(channel(). validOps()) ! = 0)
CancelledKeyException - 이 키가 삭제되었을 경우

readyOps

public abstract int readyOps()
이 키의 실행 가능 조작 세트를 가져옵니다.

반환되는 세트에는, 이 키의 채널에 있어 유효한 조작 비트만이 포함됩니다.

반환값:
이 키의 실행 가능 조작 세트
예외:
CancelledKeyException - 이 키가 삭제되었을 경우

isReadable

public final boolean isReadable()
이 키의 채널이 읽어들여 가능한 상태가 되어 있는지 어떤지를 테스트합니다.

이 메소드를 k.isReadable() 의 형식에서 호출했을 경우, 다음의 식과 같은 결과를 얻을 수 있습니다.

 k.readyOps()  & OP_READ ! = 0

이 키의 채널이 읽어들여 조작을 지원하지 않는 경우, 이 메소드는 항상 false 를 돌려줍니다.

반환값:
readyOps() & OP_READ 의 값이 제로 이외의 경우에 한해 true
예외:
CancelledKeyException - 이 키가 삭제되었을 경우

isWritable

public final boolean isWritable()
이 키의 채널이 기입해 가능한 상태가 되어 있는지 어떤지를 테스트합니다.

이 메소드를 k.isWritable() 의 형식에서 호출했을 경우, 다음의 식과 같은 결과를 얻을 수 있습니다.

 k.readyOps()  & OP_WRITE ! = 0

이 키의 채널이 기입해 조작을 지원하지 않는 경우, 이 메소드는 항상 false 를 돌려줍니다.

반환값:
readyOps() & OP_WRITE 의 값이 제로 이외의 경우에 한해 true
예외:
CancelledKeyException - 이 키가 삭제되었을 경우

isConnectable

public final boolean isConnectable()
이 키의 채널이 소켓 접속 조작을 올바르게 완료했는지 실패했는지를 테스트합니다.

이 메소드를 k.isConnectable() 의 형식에서 호출했을 경우, 다음의 식과 같은 결과를 얻을 수 있습니다.

 k.readyOps()  & OP_CONNECT ! = 0

이 키의 채널이 소켓 접속 조작을 지원하지 않는 경우, 이 메소드는 항상 false 를 돌려줍니다.

반환값:
readyOps() & OP_CONNECT 의 값이 제로 이외의 경우에 한해 true
예외:
CancelledKeyException - 이 키가 삭제되었을 경우

isAcceptable

public final boolean isAcceptable()
이 키의 채널이 새로운 소켓 접속을 받아들일 수 있는 상태가 되어 있는지 어떤지를 테스트합니다.

이 메소드를 k.isAcceptable() 의 형식에서 호출했을 경우, 다음의 식과 같은 결과를 얻을 수 있습니다.

 k.readyOps()  & OP_ACCEPT ! = 0

이 키의 채널이 소켓 접수 조작을 지원하지 않는 경우, 이 메소드는 항상 false 를 돌려줍니다.

반환값:
readyOps() & OP_ACCEPT 의 값이 제로 이외의 경우에 한해 true
예외:
CancelledKeyException - 이 키가 삭제되었을 경우

attach

public final Object  attach(Object  ob)
이 키로 지정된 객체를 첨부합니다.

첨부된 객체는, 나중에 attachment 메소드를 사용해 취득할 수 있습니다. 동시에 복수의 객체를 첨부할 수 없습니다. 이 메소드를 호출하면(자), 그 이전에 첨부된 객체는 파기됩니다. null 를 첨부하면(자), 현재의 첨부 객체가 파기됩니다.

파라미터:
ob - 첨부되는 객체. null 의 경우도 있다
반환값:
이전에 첨부된 객체가 있는 경우는 그 객체, 그 이외의 경우는 null

attachment

public final Object  attachment()
현재의 첨부 객체를 가져옵니다.

반환값:
이 키에 현재 첨부되고 있는 객체. 첨부 객체가 없는 경우는 null

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 도 참조해 주세요.