JavaTM Platform
Standard Ed. 6

java.nio.channels
클래스 SocketChannel

java.lang.Object 
  상위를 확장 java.nio.channels.spi.AbstractInterruptibleChannel 
      상위를 확장 java.nio.channels.SelectableChannel 
          상위를 확장 java.nio.channels.spi.AbstractSelectableChannel 
              상위를 확장 java.nio.channels.SocketChannel
모든 구현된 인터페이스:
Closeable , ByteChannel , Channel , GatheringByteChannel , InterruptibleChannel , ReadableByteChannel , ScatteringByteChannel , WritableByteChannel


public abstract class SocketChannel
extends AbstractSelectableChannel
implements ByteChannel , ScatteringByteChannel , GatheringByteChannel

스트림형 접속 소켓용의 선택 가능 채널입니다.

소켓 채널은, 접속 네트워크 소켓의 완전한 추상화가 아닙니다. 소켓 옵션의 바인드, 종료, 및 조작은,socket 메소드 호출에 의해 취득한 관련 Socket 객체를 개입시켜 실시할 필요가 있습니다. 임의의 기존 소켓의 채널을 작성하거나 소켓 채널에 관련한 소켓으로 SocketImpl 객체를 사용하도록(듯이) 지정할 수 없습니다.

소켓 채널은, 이 클래스의 open 메소드중 1 개(살)을 호출하는 것에 의해 작성할 수 있습니다. 새롭게 작성된 소켓 채널은 오픈입니다만, 접속은 확립되어 있지 않습니다. 미접속의 채널에 대해서 입력 조작을 호출하려고 하면(자),NotYetConnectedException 가 throw 됩니다. 소켓 채널을 접속하려면 , 그 connect 메소드를 호출합니다. 접속된 소켓 채널은, 클로즈 할 때까지 접속된 채로 있습니다. 소켓 채널이 접속되고 있을지 어떨지는,isConnected 메소드의 호출에 의해 판단할 수 있습니다.

소켓 채널은 「비블록 접속」을 지원합니다. 소켓 채널의 작성과 원격 소켓에의 링크의 확립 프로세스는 connect 메소드에 의해 개시되어 나중에 finishConnect 메소드에 의해 완료합니다. 접속 조작이 실행중일지 어떨지는,isConnectionPending 메소드의 호출에 의해 판단할 수 있습니다.

소켓 채널의 입력측과 출력측은, 실제로 채널을 클로즈 하는 일 없이, 따로 따로 「정지」됩니다. 관련 소켓 객체의 shutdownInput 메소드를 호출해 채널의 입력측을 정지한 뒤, 한층 더 채널을 읽어내려고 하면(자), 스트림의 마지막을 나타내는 -1 이 돌려주어집니다. 관련 소켓 객체의 shutdownOutput 메소드를 호출해 채널의 출력측을 정지한 뒤, 한층 더 채널에 기입하려고 하면(자),ClosedChannelException 가 throw 됩니다.

소켓 채널은,Channel 클래스로 지정되고 있는 비동기 클로즈 조작과 자주(잘) 닮은 「비동기 정지」를 지원합니다. 한편의 thread가 소켓의 채널에 대한 read 조작의 도중에 블록 되고 있는데, 이제(벌써) 한편의 thread가 소켓의 입력측을 정지했을 경우, 블록 된 thread의 read 조작은, 바이트를 일절 읽어내는 일 없이 종료해,-1 를 돌려줍니다. 한편의 thread가 소켓의 채널에 대한 기입 조작의 도중에 블록 되고 있는데, 이제(벌써) 한편의 thread가 소켓의 출력측을 정지했을 경우, 블록 된 thread는 AsynchronousCloseException 를 받습니다.

소켓 채널은, 복수의 병행 thread로 안전하게 사용할 수 있습니다. 데이터 그램 채널은 병행 read 및 기입을 지원합니다. 다만, read를 실시하는 thread도 기입을 실시하는 thread도 특정의 시점에서는 항상 1 개 이하입니다. connect 메소드와 finishConnect 메소드는 서로 동기 하고 있어, 어느 쪽인지 한편의 메소드의 호출중에 읽어들여 또는 기입해 조작을 개시하려고 하면(자), 이 처리는 최초의 호출이 완료할 때까지 블록 됩니다.

도입된 버젼:
1.4

생성자 의 개요
protected SocketChannel (SelectorProvider  provider)
          이 클래스의 새로운 인스턴스를 초기화합니다.
 
메소드의 개요
abstract  boolean connect (SocketAddress  remote)
          이 채널의 소켓을 접속합니다.
abstract  boolean finishConnect ()
          소켓 채널의 접속 처리를 완료합니다.
abstract  boolean isConnected ()
          이 채널의 네트워크 소켓이 접속되고 있는지 어떤지를 판단합니다.
abstract  boolean isConnectionPending ()
          이 채널상에서 접속 조작이 진행중인가 어떤가를 판단합니다.
static SocketChannel open ()
          소켓 채널을 오픈합니다.
static SocketChannel open (SocketAddress  remote)
          소켓 채널을 오픈해, 원격 주소에 접속합니다.
abstract  int read (ByteBuffer  dst)
          이 채널의 바이트 순서를 지정의 버퍼에 읽어들입니다.
 long read (ByteBuffer [] dsts)
          이 채널의 바이트 순서가 지정된 버퍼에 읽어들입니다.
abstract  long read (ByteBuffer [] dsts, int offset, int length)
          이 채널의 바이트 순서가 지정된 버퍼의 서브 순서에 읽어들입니다.
abstract  Socket socket ()
          이 채널에 관련한 소켓을 가져옵니다.
 int validOps ()
          이 채널의 지원되고 있는 조작을 식별하는 조작 세트를 돌려줍니다.
abstract  int write (ByteBuffer  src)
          이 채널의 바이트 순서를 지정의 버퍼로부터 써냅니다.
 long write (ByteBuffer [] srcs)
          이 채널의 바이트 순서가 지정된 버퍼로부터 써냅니다.
abstract  long write (ByteBuffer [] srcs, int offset, int length)
          이 채널의 바이트 순서가 지정된 버퍼의 서브 순서로부터 써냅니다.
 
클래스 java.nio.channels.spi. AbstractSelectableChannel 로부터 상속된 메소드
blockingLock , configureBlocking , implCloseChannel , implCloseSelectableChannel , implConfigureBlocking , isBlocking , isRegistered , keyFor , provider , register
 
클래스 java.nio.channels. SelectableChannel 로부터 상속된 메소드
register
 
클래스 java.nio.channels.spi. AbstractInterruptibleChannel 로부터 상속된 메소드
begin , close , end , isOpen
 
클래스 java.lang. Object 로부터 상속된 메소드
clone , equals , finalize , getClass , hashCode , notify , notifyAll , toString , wait , wait , wait
 
인터페이스 java.nio.channels. Channel 로부터 상속된 메소드
close , isOpen
 

생성자 의 상세

SocketChannel

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

메소드의 상세

open

public static SocketChannel  open()
                          throws IOException 
소켓 채널을 오픈합니다.

새로운 채널을 작성하려면 , 시스템 전체의 디폴트인 SelectorProvider 객체의 openSocketChannel 메소드를 호출합니다.

반환값:
새로운 소켓 채널
예외:
IOException - 입출력 에러가 발생했을 경우

open

public static SocketChannel  open(SocketAddress  remote)
                          throws IOException 
소켓 채널을 오픈해, 원격 주소에 접속합니다.

이 편리한 메소드는,open() 메소드의 호출과 같이 기능합니다. 구체적으로는, 결과적으로 얻을 수 있는 소켓 채널에 대해서 connect 메소드를 호출해, 이것을 remote 에 건네주어, 그 채널을 돌려줍니다.

파라미터:
remote - 새로운 채널의 접속처 원격 주소
예외:
AsynchronousCloseException - 접속 조작의 진행중에, 다른 thread에 의해 이 채널이 클로즈 되었을 경우
ClosedByInterruptException - 접속 조작의 진행중에 다른 thread로부터의 인터럽트가 있었기 때문에 채널이 클로즈 해, 현재의 thread의 인터럽트 상태가 설정되었을 경우
UnresolvedAddressException - 지정된 원격 주소가 완전하게 해결되지 않는 경우
UnsupportedAddressTypeException - 지정된 원격 주소의 타입이 지원 대상외의 경우
SecurityException - 시큐리티 매니저가 인스톨 되고 있어, 지정된 원격 엔드 포인트에의 액세스가 허가되어 있지 않은 경우
IOException - 그 외의 입출력 에러가 발생했을 경우

validOps

public final int validOps()
이 채널의 지원되고 있는 조작을 식별하는 조작 세트를 돌려줍니다.

소켓 채널은, 접속, 읽어내, 및 기입을 지원하므로, 이 메소드는 (SelectionKey.OP_CONNECT | SelectionKey.OP_READ | SelectionKey.OP_WRITE ) 을 돌려줍니다.

정의:
클래스 SelectableChannel 내의 validOps
반환값:
유효한 조작 세트

socket

public abstract Socket  socket()
이 채널에 관련한 소켓을 가져옵니다.

반환되는 객체는,Socket 클래스에서 선언되어 있지 않은 public 메소드는 선언하지 않습니다.

반환값:
이 채널에 관련한 소켓

isConnected

public abstract boolean isConnected()
이 채널의 네트워크 소켓이 접속되고 있는지 어떤지를 판단합니다.

반환값:
이 채널의 네트워크 소켓이 접속되고 있는 경우에 한해 true

isConnectionPending

public abstract boolean isConnectionPending()
이 채널상에서 접속 조작이 진행중인가 어떤가를 판단합니다.

반환값:
이 채널상에서 접속 조작이 개시되고 있어, 아직 완료하고 있지 않는 (finishConnect 메소드가 불려 가지 않았다) 경우에 한해 true

connect

public abstract boolean connect(SocketAddress  remote)
                         throws IOException 
이 채널의 소켓을 접속합니다.

이 채널이 비블록 모드의 경우, 이 메소드의 호출에 의해, 비블록 접속 조작이 개시됩니다. 로컬 접속의 경우와 같이 즉석에서 접속이 확립되는 경우, 이 메소드는 true 를 돌려줍니다. 그 이외의 경우는 false 를 돌려줍니다. 이 경우는, 나중에 finishConnect 메소드를 호출하는 것으로, 접속 조작을 완료할 필요가 있습니다.

이 채널이 블록 모드의 경우, 이 메소드의 호출은, 접속이 확립될까 입출력 에러가 발생할 때까지 블록 됩니다.

이 메소드는,Socket 클래스와 완전히 같은 시큐리티 체크를 실시합니다. 시큐리티 매니저가 인스톨 되고 있는 경우, 이 메소드는, 그 checkConnect 메소드가 지정된 원격 엔드 포인트의 주소 및 포트 번호에의 접속을 허가하는 것을 확인합니다.

이 메소드는 언제라도 호출할 수가 있습니다. 이 메소드를 호출하고 있는 도중에 이 채널에 대한 읽기 또는 기입해 조작을 호출했을 경우, 최초의 호출이 완료할 때까지 다음의 호출은 블록 됩니다. 접속하려고 했지만 실패했을 경우, 즉 이 메소드의 호출이 체크 예외를 throw 하는 경우, 채널은 클로즈 됩니다.

파라미터:
remote - 이 채널의 접속처 원격 주소
반환값:
접속이 확립되었을 경우 true, 이 채널이 비블록 모드로 접속 조작의 실행중인 경우는 false
예외:
AlreadyConnectedException - 이 채널이 벌써 접속되고 있는 경우
ConnectionPendingException - 이 채널로 벌써 비블록 접속 조작이 실행중인 경우
ClosedChannelException - 이 채널이 클로즈 하고 있는 경우
AsynchronousCloseException - 접속 조작의 진행중에, 다른 thread에 의해 이 채널이 클로즈 되었을 경우
ClosedByInterruptException - 접속 조작의 진행중에 다른 thread로부터의 인터럽트가 있었기 때문에 채널이 클로즈 해, 현재의 thread의 인터럽트 상태가 설정되었을 경우
UnresolvedAddressException - 지정된 원격 주소가 완전하게 해결되지 않는 경우
UnsupportedAddressTypeException - 지정된 원격 주소의 타입이 지원 대상외의 경우
SecurityException - 시큐리티 매니저가 인스톨 되고 있어, 지정된 원격 엔드 포인트에의 액세스가 허가되어 있지 않은 경우
IOException - 그 외의 입출력 에러가 발생했을 경우

finishConnect

public abstract boolean finishConnect()
                               throws IOException 
소켓 채널의 접속 처리를 완료합니다.

소켓 채널을 비블록 모드로 해, 그 connect 메소드를 호출하면(자), 비블록 접속 조작이 개시됩니다. 접속이 확립되는지, 접속에 실패한 뒤, 소켓 채널은 접속 가능한 상태가 됩니다. 여기서, 접속 순서를 완료하기 위해서, 이 메소드가 불려 갑니다. 접속 조작에 실패했을 경우, 이 메소드를 호출하면(자) 적절한 IOException 이 throw 됩니다.

이 채널이 벌써 접속되고 있는 경우, 이 메소드는 블록 되어 즉시 true 를 돌려줍니다. 이 채널이 비블록 모드의 경우, 접속 처리가 아직 완료하고 있지 않으면, 이 메소드는 false 를 돌려줍니다. 이 채널이 블록 모드의 경우, 접속이 완료하는지 실패할 때까지 이 메소드는 블록 됩니다. 덧붙여 접속이 완료했을 경우는 true 가 돌려주어져 접속에 실패했을 경우는 체크 예외가 throw 됩니다.

이 메소드는 언제라도 호출할 수가 있습니다. 이 메소드를 호출하고 있는 도중에 이 채널에 대한 읽기 또는 기입해 조작을 호출했을 경우, 최초의 호출이 완료할 때까지 다음의 호출은 블록 됩니다. 접속하려고 했지만 실패했을 경우, 즉 이 메소드의 호출이 체크 예외를 throw 하는 경우, 채널은 클로즈 됩니다.

반환값:
이 채널의 소켓이 접속되고 있는 경우에 한해 true
예외:
NoConnectionPendingException - 이 채널이 접속되지 않고, 접속 조작도 개시되어 있지 않은 경우
ClosedChannelException - 이 채널이 클로즈 하고 있는 경우
AsynchronousCloseException - 접속 조작의 진행중에, 다른 thread에 의해 이 채널이 클로즈 되었을 경우
ClosedByInterruptException - 접속 조작의 진행중에 다른 thread로부터의 인터럽트가 있었기 때문에 채널이 클로즈 해, 현재의 thread의 인터럽트 상태가 설정되었을 경우
IOException - 그 외의 입출력 에러가 발생했을 경우

read

public abstract int read(ByteBuffer  dst)
                  throws IOException 
인터페이스 ReadableByteChannel 의 기술:
이 채널의 바이트 순서를 지정의 버퍼에 읽어들입니다.

채널로부터 최대 r 바이트를 읽어내려고 합니다. r 는, 이 메소드를 호출할 때 버퍼내에 존재하는 바이트수,dst.remaining() 가 됩니다.

길이 n (0 <= n <= r)의 바이트 순서가 읽어내진다고 합니다. 이 바이트 순서가 버퍼에 전송 되기 (위해)때문에, 순서내의 최초의 바이트의 인덱스는 p, 마지막 바이트의 인덱스는 p + n - 1 이 됩니다. 덧붙여p 는, 이 메소드를 호출할 때의 버퍼의 위치입니다. 버퍼의 위치는, 돌려주어질 때 p + n 에 동일해집니다. 리밋트에 변화는 없습니다.

read 조작에 의해 버퍼가 가득 된다고는인가 선. 바이트가 일절 읽어내지지 않은 경우도 있습니다. 버퍼가 가득 될지 어떨지는, 채널의 본래의 성질과 상태에 의해 결정합니다. 예를 들어 비블록 모드의 소켓은, 소켓의 입력 버퍼로부터 즉시 취득할 수 있는 바이트 이외를 읽어낼 수가 없습니다. 같이 파일 채널은, 파일내의 바이트 이외를 읽어낼 수가 없습니다. 다만, 채널이 블록 모드이며, 버퍼내의 바이트수가 1 바이트 이상의 경우, 1 바이트 이상이 읽어내질 때까지 이 메소드는 블록 되게 되어 있습니다.

이 메소드는 언제라도 호출할 수가 있습니다. 다만, 다른 thread가 이 채널에 대해서 읽어들여 조작을 개시하고 있는 경우, 이 메소드의 호출은 최초의 조작이 끝날 때까지 블록 됩니다.

정의:
인터페이스 ReadableByteChannel 내의 read
파라미터:
dst - 바이트의 전송처 버퍼
반환값:
읽힌 문자수. 제로인가, 채널이 스트림의 마지막에 이르고 있는 경우는 -1
예외:
NotYetConnectedException - 이 채널이 아직 접속되어 있지 않은 경우
ClosedChannelException - 이 채널이 클로즈 하고 있는 경우
AsynchronousCloseException - read 조작의 진행중에, 다른 thread에 의해 이 채널이 클로즈 되었을 경우
ClosedByInterruptException - read 조작의 진행중에 다른 thread로부터의 인터럽트가 있었기 때문에 채널이 클로즈 해, 현재의 thread의 인터럽트 상태가 설정되었을 경우
IOException - 그 외의 입출력 에러가 발생했을 경우

read

public abstract long read(ByteBuffer [] dsts,
                          int offset,
                          int length)
                   throws IOException 
인터페이스 ScatteringByteChannel 의 기술:
이 채널의 바이트 순서가 지정된 버퍼의 서브 순서에 읽어들입니다.

이 메소드 호출은, 이 채널로부터 최대 r 바이트를 읽어내려고 합니다. r 는, 이 메소드의 호출시로 지정된 버퍼 배열의 지정된 서브 순서에 포함되는 합계 바이트수입니다.

 dsts[offset]. remaining()
     + dsts[offset+1]. remaining()
     + ... + dsts[offset+length-1]. remaining()

길이 n (0 <= n <= r)의 바이트 순서가 읽어내진다고 합니다. 이 순서의 최초의 dsts[offset]. remaining() 바이트까지가 버퍼 dsts[offset] 에 전송 되어 다음의 dsts[offset+1]. remaining() 바이트까지가 버퍼 dsts[offset+1] 에 전송 됩니다. 이 처리는, 모든 바이트 순서가 지정된 버퍼에 전송 될 때까지 반복해집니다. 각 버퍼에는 최대한의 바이트가 전송 되기 (위해)때문에, 최종 갱신 버퍼를 제외한 개개의 갱신 버퍼의 최종적인 위치는, 이 버퍼의 리밋트와 동일해집니다.

이 메소드는 언제라도 호출할 수가 있습니다. 다만, 다른 thread가 이 채널에 대해서 읽어들여 조작을 개시하고 있는 경우, 이 메소드의 호출은 최초의 조작이 끝날 때까지 블록 됩니다.

정의:
인터페이스 ScatteringByteChannel 내의 read
파라미터:
dsts - 바이트의 전송처 버퍼
offset - 최초의 바이트의 전송처가 되는 버퍼 배열내의 오프셋(offset). dsts.length 이하의 부가 아닌 값
length - 액세스 되는 최대 버퍼수. dsts.length - offset 이하의 부가 아닌 값
반환값:
읽힌 문자수. 제로인가, 채널이 스트림의 마지막에 이르고 있는 경우는 -1
예외:
NotYetConnectedException - 이 채널이 아직 접속되어 있지 않은 경우
ClosedChannelException - 이 채널이 클로즈 하고 있는 경우
AsynchronousCloseException - read 조작의 진행중에, 다른 thread에 의해 이 채널이 클로즈 되었을 경우
ClosedByInterruptException - read 조작의 진행중에 다른 thread로부터의 인터럽트가 있었기 때문에 채널이 클로즈 해, 현재의 thread의 인터럽트 상태가 설정되었을 경우
IOException - 그 외의 입출력 에러가 발생했을 경우

read

public final long read(ByteBuffer [] dsts)
                throws IOException 
인터페이스 ScatteringByteChannel 의 기술:
이 채널의 바이트 순서가 지정된 버퍼에 읽어들입니다.

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

 c.read(dsts, 0, dsts.length);

정의:
인터페이스 ScatteringByteChannel 내의 read
파라미터:
dsts - 바이트의 전송처 버퍼
반환값:
읽힌 문자수. 제로인가, 채널이 스트림의 마지막에 이르고 있는 경우는 -1
예외:
NotYetConnectedException - 이 채널이 아직 접속되어 있지 않은 경우
ClosedChannelException - 이 채널이 클로즈 하고 있는 경우
AsynchronousCloseException - read 조작의 진행중에, 다른 thread에 의해 이 채널이 클로즈 되었을 경우
ClosedByInterruptException - read 조작의 진행중에 다른 thread로부터의 인터럽트가 있었기 때문에 채널이 클로즈 해, 현재의 thread의 인터럽트 상태가 설정되었을 경우
IOException - 그 외의 입출력 에러가 발생했을 경우

write

public abstract int write(ByteBuffer  src)
                   throws IOException 
인터페이스 WritableByteChannel 의 기술:
이 채널의 바이트 순서를 지정의 버퍼로부터 써냅니다.

채널에 최대 r 바이트를 기입하려고 합니다. r 는, 이 메소드를 호출할 때 버퍼내에 존재하는 바이트수,src.remaining() 가 됩니다.

길이 n (0 <= n <= r)의 바이트 순서가 기입해진다고 합니다. 이 바이트 순서는, 버퍼의 인덱스 p 로부터 전송 됩니다. p 는, 이 메소드를 호출할 때의 버퍼의 위치입니다. 기입해지는 마지막 바이트의 인덱스는 p + n - 1 이 됩니다. 버퍼의 위치는, 돌려주어질 때 p + n 에 동일해집니다. 리밋트에 변화는 없습니다.

특히 지정이 없는 한, 요구된 r 바이트가 모두 기입해지면(자) 기입 조작은 종료합니다. 채널의 종류에 따라서는, 그 상태에 응해, 일부의 바이트 밖에 기입해지지 않은 경우나, 전혀 기입을 하지 않는 경우도 있습니다. 예를 들어 비블록 모드의 소켓 채널에서는, 소켓의 출력 버퍼내의 바이트수가 최대 기입 바이트수가 됩니다.

이 메소드는 언제라도 호출할 수가 있습니다. 다만, 다른 thread가 이 채널에 대해서 기입해 조작을 개시하고 있는 경우, 이 메소드의 호출은 최초의 조작이 끝날 때까지 블록 됩니다.

정의:
인터페이스 WritableByteChannel 내의 write
파라미터:
src - 바이트의 취득처 버퍼
반환값:
기입해지는 바이트수. 제로의 경우도 있다
예외:
NotYetConnectedException - 이 채널이 아직 접속되어 있지 않은 경우
ClosedChannelException - 이 채널이 클로즈 하고 있는 경우
AsynchronousCloseException - 기입중에 다른 thread에 의해 이 채널이 클로즈 되었을 경우
ClosedByInterruptException - 기입중에 다른 thread로부터의 인터럽트가 있었기 때문에 채널이 클로즈 해, 현재의 thread의 인터럽트 상태가 설정되었을 경우
IOException - 그 외의 입출력 에러가 발생했을 경우

write

public abstract long write(ByteBuffer [] srcs,
                           int offset,
                           int length)
                    throws IOException 
인터페이스 GatheringByteChannel 의 기술:
이 채널의 바이트 순서가 지정된 버퍼의 서브 순서로부터 써냅니다.

이 채널에 최대 r 바이트를 기입하려고 합니다. r 는, 이 메소드의 호출시로 지정된 버퍼 배열의 지정된 서브 순서에 포함되는 합계 바이트수입니다.

 srcs[offset]. remaining()
     + srcs[offset+1]. remaining()
     + ... + srcs[offset+length-1]. remaining()

길이 n (0 <= n <= r)의 바이트 순서가 기입해진다고 합니다. 이 순서의 최초의 srcs[offset]. remaining() 바이트까지는 버퍼 srcs[offset] 로부터 기입해져 다음의 srcs[offset+1]. remaining() 바이트는 버퍼 srcs[offset+1] 로부터 기입해집니다. 바이트 순서 전부가 기입해질 때까지, 이 처리가 반복해집니다. 각 버퍼로부터 최대한의 바이트수가 기입해지기 (위해)때문에, 갱신된 개개의 버퍼의 최종적인 위치는, 최종 갱신 버퍼를 제외해, 이 버퍼의 리밋트와 동일해집니다.

특히 지정이 없는 한, 요구된 r 바이트가 모두 기입해지면(자) 기입 조작은 종료합니다. 채널의 종류에 따라서는, 그 상태에 응해, 일부의 바이트 밖에 기입해지지 않은 경우나, 전혀 기입을 하지 않는 경우도 있습니다. 예를 들어 비블록 모드의 소켓 채널에서는, 소켓의 출력 버퍼내의 바이트수가 최대 기입 바이트수가 됩니다.

이 메소드는 언제라도 호출할 수가 있습니다. 다만, 다른 thread가 이 채널에 대해서 기입해 조작을 개시하고 있는 경우, 이 메소드의 호출은 최초의 조작이 끝날 때까지 블록 됩니다.

정의:
인터페이스 GatheringByteChannel 내의 write
파라미터:
srcs - 바이트의 취득처 버퍼
offset - 최초의 바이트의 취득처가 되는 버퍼 배열내의 오프셋(offset). srcs.length 이하의 부가 아닌 값
length - 액세스 되는 최대 버퍼수. srcs.length - offset 이하의 부가 아닌 값
반환값:
기입해지는 바이트수. 제로의 경우도 있다
예외:
NotYetConnectedException - 이 채널이 아직 접속되어 있지 않은 경우
ClosedChannelException - 이 채널이 클로즈 하고 있는 경우
AsynchronousCloseException - 기입중에 다른 thread에 의해 이 채널이 클로즈 되었을 경우
ClosedByInterruptException - 기입 조작의 진행중에 다른 thread로부터의 인터럽트가 있었기 때문에 채널이 클로즈 해, 현재의 thread의 인터럽트 상태가 설정되었을 경우
IOException - 그 외의 입출력 에러가 발생했을 경우

write

public final long write(ByteBuffer [] srcs)
                 throws IOException 
인터페이스 GatheringByteChannel 의 기술:
이 채널의 바이트 순서가 지정된 버퍼로부터 써냅니다.

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

 c.write(srcs, 0, srcs.length);

정의:
인터페이스 GatheringByteChannel 내의 write
파라미터:
srcs - 바이트의 취득처 버퍼
반환값:
기입해지는 바이트수. 제로의 경우도 있다
예외:
NotYetConnectedException - 이 채널이 아직 접속되어 있지 않은 경우
ClosedChannelException - 이 채널이 클로즈 하고 있는 경우
AsynchronousCloseException - 기입중에 다른 thread에 의해 이 채널이 클로즈 되었을 경우
ClosedByInterruptException - 기입 조작의 진행중에 다른 thread로부터의 인터럽트가 있었기 때문에 채널이 클로즈 해, 현재의 thread의 인터럽트 상태가 설정되었을 경우
IOException - 그 외의 입출력 에러가 발생했을 경우

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