WritableByteChannel — 바이트를 쓸 수 있는 채널
WritableByteChannel — 바이트를 쓸 수 있는 채널
WritableByteChannel은 바이트를 쓸 수 있는 채널을 나타내는 인터페이스예요. 쓸 수 있는 채널에 대한 쓰기 연산은 한 번에 하나만 진행될 수 있어요.
본문
public interface WritableByteChannel extends Channel
바이트를 쓸 수 있는 채널이에요. 어떤 시점에도 쓰기 가능한 채널에 대한 쓰기 연산은 하나만 진행될 수 있어요. 한 스레드가 채널에 대해 쓰기 연산을 시작하면, 다른 쓰기 연산을 시작하려는 다른 스레드는 첫 연산이 완료될 때까지 블로킹돼요. 쓰기 연산과 동시에 다른 종류의 I/O 연산이 진행될 수 있는지는 채널의 유형에 따라 달라져요. Java 1.4부터 사용할 수 있어요.
알려진 하위 인터페이스
ByteChannel, GatheringByteChannel, SeekableByteChannel
알려진 구현 클래스
DatagramChannel, FileChannel, Pipe.SinkChannel, SocketChannel
메서드 요약
| 수식자와 타입 | 메서드 | 설명 |
|---|---|---|
int |
write(ByteBuffer src) |
주어진 버퍼에서 이 채널로 바이트 시퀀스를 써요. |
Channel 인터페이스에 선언된 메서드: close, isOpen
write
int write(ByteBuffer src) throws IOException
주어진 버퍼에서 이 채널로 바이트 시퀀스를 써요. 이 메서드가 호출되는 순간 버퍼에 남아 있는 바이트 수, 즉 src.remaining()을 r이라고 할 때, 최대 r바이트를 채널에 쓰려 시도해요.
길이 n(0 <= n <= r)의 바이트 시퀀스가 쓰여진다고 가정해요. 이 시퀀스는 메서드가 호출되는 순간의 버퍼 위치인 인덱스 p부터 시작해 버퍼에서 전송돼요. 마지막으로 쓰인 바이트의 인덱스는 p + n - 1이에요. 반환 시 버퍼의 위치는 p + n이 되고, limit은 변하지 않아요.
특별히 명시되지 않는 한, 쓰기 연산은 요청된 r바이트를 모두 쓴 후에야 반환해요. 일부 채널 유형은 상태에 따라 일부 바이트만 쓰거나 아예 쓰지 못할 수도 있어요. 예를 들어 비블로킹 모드의 소켓 채널은 소켓 출력 버퍼에 여유가 있는 바이트보다 많이 쓸 수 없어요.
이 메서드는 언제든 호출될 수 있어요. 다만 다른 스레드가 이미 이 채널에 대한 쓰기 연산을 시작했다면, 이 메서드의 호출은 첫 연산이 완료될 때까지 블로킹돼요.
매개변수: src — 바이트를 가져올 버퍼
반환값: 쓰인 바이트 수(0일 수 있음)
예외:
NonWritableChannelException— 이 채널이 쓰기용으로 열리지 않았을 때ClosedChannelException— 이 채널이 닫혀 있을 때AsynchronousCloseException— 쓰기 연산이 진행되는 동안 다른 스레드가 이 채널을 닫을 때ClosedByInterruptException— 쓰기 연산이 진행되는 동안 다른 스레드가 현재 스레드를 인터럽트해 채널을 닫고 현재 스레드의 인터럽트 상태를 설정할 때IOException— 다른 I/O 오류가 발생했을 때