[JAVA] NIO란?
[JAVA] NIO란?
NIO(Non-blocking I/O, New I/O)
- 강력한 I/O 오퍼레이션 기능을 제공하는 자바 프로그래밍 API
- NIO의 키워드는 3가지 : 버퍼, 채널, 셀렉터
Input Output이란?
- I/O는 소스로부터 데이터를 읽어서 목적지에 데이터를 읽는 것
- 데이터는 입력 소스로부터 읽고 출력 목적지로 쓰여진다.
- ex) 키보드가 표준 입력으로 동작하면, 데이터를 읽어 프로그램에 쓰여지는 것
- ex) 표준출력으로 텍스트를 출력하기 위해 System.out.println()를 사용하는것
- JDK에 java.io 및 java.nio 패키지에는 I/O를 처리하는 자바클래스들이 포함되어 있다
- java.io패키지는 I/O를 수행하기 위한 굉장히 많은 클래스들을 가지고 있다
- java.io패키지는 class explosion이다.
- class explosion : 클래스가 증가하는 수가 관리할 수 없는 지경에 이르는 것
Input/Output Streams
- Stream의 사전적 의미 : 무엇인가의 끊기지 않는 흐름
- Java I/O에서 stream의 의미는 데이터의 순차적인 흐름
- 스트림의 데이터는 byte, 문자, 객체일 수 있음
- 강은 물의 스트림
- 물은 소스로부터 목적지까지 끊기지 않고 흐름
- Java I/O도 데이터의 흐름
- Data soure로부터 Data sink인 목적지까지 흐른다
- 즉, 자바 프로그램은 input 스트림으로 데이터를 읽고 output 스트림으로 데이터를 씀
NIO란?
- 스트림 기반 I/O에서는 데이터 소스와 데이터 싱크, 자바 프로그램간의 데이터 이동을 위해서 스트림을 사용
- 자바 프로그램은 스트림으로부터 데이터를 읽거나 쓴다
- 이러한 접근은 I/O 수행을 느리게 만든다.
- NIO는 스트림 기반 I/O의 느린 속도를 해결한다.
- I/O처리를 위해 채널과 버퍼를 사용한다
- 채널=stream이라고 보면 편하다
- 채널은 데이터 소스/싱크 및 자바 프로그램간의 연결을 대표한다
- 채널과 스트림과의 한가지 차이점이 존재
- 스트림은 단방향 데이터 전송을 위해 사용
- 채널은 양방향 전송 능력을 가지고 있음
- 채널은 데이터를 읽을 때뿐만 아니라 쓸 때에도 데이터 전송을 위해 사용할 수 있다.
- 요구에 따라 read-write채널을 설정할 수 있고, read-only, wirte-only채널을 설정 할수도있다.
- 스트림 기반 I/O에서 데이터 전송의 기본 단위는 byte
- 채널 기반 I/O에서 데이터 전송의 기본 단위는 buffer
- 버퍼는 bounded data container이다.(정해진 용량을 가지고 있다)
- 스트림 기반 I/O에서는 데이터를 stream에 직접 쓴다
- 채널 기반 I/O에서는 데이터를 buffer에 넣는다.
출처
댓글
댓글 쓰기