자바 I/O & NIO 네트워크 정리 14 : 채널

0

1. 🕐 채널 개요

채널이 데이터를 전달하는것은 스트림과 유사하지만, 다르다.
채널은 일종의 게이트 웨이에 해당한다.

게이트 웨이

다른 네트워크로 들어가는 입구 역할을 하는 네트워크 포인트이다.
넓은 의미로는 종류가 다른 네트워크 간의 통로의 역할을 하는 장치이며, 공유기나 랜카드에 해당한다.

채널은 ByteBuffer를 사용하여 통신한다.

ByteBuffer를 사용하는 이유

운영체제의 기본적인 데이터 형식이 Byte이기 때문에 간접적으로라도 ByteBuffer를 사용함으로써
다양한 네이티브 서비스를 이용할수 있다.

2. 💥 채널의 기본 인터페이스

채널은 버퍼와 달리 인터페이스 기반으로 되어 있다.

1. Channel, InterruptibleChannel

public interface Channel extends Closeable{
	public boolean isOpen();
    public void close() throws IOException;
    
}

채널은 isOpen() 메소드와 close 메소드를 정의하고 있다.

public interface InterruptibleChannel extends Chennel{
	public void close() throws IOE
}

2.

4. ScatteringByteChannel,GatheringByteChannel

Scatter/Gatter라는 운영체제가 지원하는 기술에 대해 알아봤다.
publi

3. 💫 파일채널

파일 채널은 앞서 살펴본 3가지 인터페이스 중에서 3가지 주요 인터페이스군을 구현하고 있다.

  1. ByteChnnael - > 양방향성을 가질수 있음
  2. ScatteringByteChannel, GatheringByteChannel -> 인터페이스를 구현하여 효율적인 읽기 쓰기가 가능
  3. AbstractInterruptibleChannel -> 비동기적인 방식으로 채널을 close 스레드와 채널의 상태 불일치가 발생하지 않도록 보장

이제 파일 채널의 일반적인 특성을 알아보자.

1. 파일채널은 항상 블록킹 모드이며, 비 블록킹 모드로 설정 불가능하다.

현대의 운영체제는 캐싱과 프리페치 알고리즘으로 디스크io를 빠르게 처리할 수 없다.
비 블록킹모드를 이용할 경우, 처리가 완료 되면 프로세스에게 IO요청에 대한 처리 결과를 알려준다.

2. 파일채널 객체는 직접 만들 수 없다.

파일 채널 객체는 이미 열려있는 파일객체로 부터 getChannel()메소드를 호출해서 생성된다.

3. 대부분의 채널처럼 파일채널도 가능하면 네이티브 IO서비스를 사용하기위해 노력한다.

4. 파일채널 객체는 스레드에 안전하다.

만약 한 스레드가 파일 크기, 파일채널의 포지션을 변경하면 해당스레드가 마무리할때까지 기다렸다가 수행하도록 되어있어 안전한 동작이 보장된다.

profile
쉽게 가르칠수 있도록 노력하자

0개의 댓글