본문 바로가기
Develop

이것이 자바다 - NIO 기반 입출력 및 네트워킹

by _dreamgirl 2020. 2. 22.
반응형

이것이 자바다 - NIO 기반 입출력 및 네트워킹

 

NIO

  • 자바4에서부터 java.nio 패키지에 포함됨
  • 자바7에서 비동기 채널 등의 네트워크 지원을 대폭 강화하면서 NIO.2 API를 추가함
  • NIO는 채널 기반이다. 스트림과 달리 채널은 양방향으로 입출력이 가능하다.
  • NIO는 기본적으로 버퍼를 사용해서 IO보다는 입출력 성능이 좋다.
  • IO는 블록킹 된다면 NIO는 블로킹과 논블로킹 둘다 지원. 블로킹은 인터럽트가 지원됨.
  • 대용량 데이터를 전송하는 경우는 IO, 연결 클라이언트가 많고 입출력 처리가 작은것은 NIO을 권장

 

파일과 디렉토리

  • Paths.get() : 파일의 경로 반환
  • FileSystems.getDefault() : 파일 시스템 정보 반환
  • Files : 파일 속성 읽기, 파일 및 디렉토리 생성/삭제 관련 클래스 

 

와치서비스

  • 일반적으로 파일 변경 통지 메커니즘으로 알려져 있다

 

 

버퍼

  • Direct / NonDirect 두가지로 분류됨
  • 데이터 타입에 다라 버퍼가 제공됨
  • Direct 버퍼는 운영치제의 메모리를 사용하여 버퍼 생성 시간은 늦지만 버퍼의 크기 때문에 입출력이 잦을 때 사용
  • NonDirect 버퍼는 JVM 메모리를 사용, 버퍼 생성 시간은 짧지만 할당된 버퍼의 크기가 작고 입출력 성능이 늦다.
  • allocate() / wrap() : NonDirect 버퍼 생성
  • allocatDirect() : Direct 버퍼 생성, ByteBuffer에만 있다.

 

ByteOrder

  • Big Endian : 앞쪽 바이트부터 먼저 처리하는 것
  • Little Endian : 뒤쪽 바이트부터 먼저 처리하는 것

 

 

파일 채널

  • FileChannel open, close
  • FileChannel의 read, write 메소드는 파일 입출력 동안 작업이 블로킹된다.
  • 비동기 파일 채널을 지원함 AsynchronousFileChannel

 

TCP 블로킹 채널

  • ServerSoketChannel
  • SocketChannel

 

TCP 넌블로킹 채널

  • Selctor
  • 1. 작업 유형을 키(SelectionKey)로 생성하고 Selector의 관심키셋에 저장
  • 2. 작업 준비가 된 키를 선택된 키셋에 별도로 저장
  • 3. 작업스레드가 선택된 키셋에 있는 키를 하나씩 꺼내어 키와 연관된 채널 작업을 처리

 

TCP 비동기 채널

  • AsynchronousServerSocketChannel, AsynchronousSocketChannel
  • 비동기 채널 그룹 : 같은 스레드풀을 공유하는 비동기 채널의 묶음
  • 비동기 서버소켓 채널 : open, close, accept 완료 처리 handler에 대해 구현
  • 비동기 소켓 채널

 

UDP

  • DatagramChannel
반응형

댓글