[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에 넣는다.


출처

댓글

이 블로그의 인기 게시물

[Python] # -*- coding: utf-8 -*-를 쓰는 이유

[소프트웨어공학] NS(Nassi-Schneiderman) 차트

[컴퓨터네트워크] Telnet이란?