JavaTM Platform
Standard Ed. 6

java.nio.channels
인터페이스 ScatteringByteChannel

모든 슈퍼 인터페이스:
Channel , Closeable , ReadableByteChannel
기존의 구현 클래스의 일람:
DatagramChannel , FileChannel , Pipe.SourceChannel , SocketChannel


public interface ScatteringByteChannel
extends ReadableByteChannel

버퍼 순서에 바이트를 읽어들일 수가 있는 채널입니다.

「분산」read 조작은, 1 회의 호출로, 지정된 버퍼 순서 (복수가능)에 단일의 바이트 순서를 읽어들입니다. 일반적으로, 분산 read는, 특정의 네트워크 프로토콜이나 파일 형식 (데이터를 1 개 이상의 고정장 헤더와 가변 길이의 본체로부터 되는 세그먼트(segment)에 정리하는 기능을 가지는 것 등)을 구현하는 경우에 도움이 됩니다. 이것에 유사한 「수집」기입 조작은,GatheringByteChannel 인터페이스에 정의되고 있습니다.

도입된 버젼:
1.4

메소드의 개요
 long read (ByteBuffer [] dsts)
          이 채널의 바이트 순서가 지정된 버퍼에 읽어들입니다.
 long read (ByteBuffer [] dsts, int offset, int length)
          이 채널의 바이트 순서가 지정된 버퍼의 서브 순서에 읽어들입니다.
 
인터페이스 java.nio.channels. ReadableByteChannel 로부터 상속된 메소드
read
 
인터페이스 java.nio.channels. Channel 로부터 상속된 메소드
close , isOpen
 

메소드의 상세

read

long read(ByteBuffer [] dsts,
          int offset,
          int length)
          throws IOException 
이 채널의 바이트 순서가 지정된 버퍼의 서브 순서에 읽어들입니다.

이 메소드 호출은, 이 채널로부터 최대 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가 이 채널에 대해서 읽어들여 조작을 개시하고 있는 경우, 이 메소드의 호출은 최초의 조작이 끝날 때까지 블록 됩니다.

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

read

long read(ByteBuffer [] dsts)
          throws IOException 
이 채널의 바이트 순서가 지정된 버퍼에 읽어들입니다.

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

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

파라미터:
dsts - 바이트의 전송처 버퍼
반환값:
읽힌 문자수. 제로인가, 채널이 스트림의 마지막에 이르고 있는 경우는 -1
예외:
NonReadableChannelException - 이 채널이 읽어들여 가능하지 않은 경우
ClosedChannelException - 이 채널이 클로즈 하고 있는 경우
AsynchronousCloseException - read 조작의 진행중에, 다른 thread에 의해 이 채널이 클로즈 되었을 경우
ClosedByInterruptException - read 조작의 진행중에 다른 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 도 참조해 주세요.