1 / 12

19 장 : NIO

19 장 : NIO. NIO 개요. 블록킹 모드 기존 스트림 입출력은 블록킹 (blocking) 모드로 입출력을 처리 논 - 블록킹 모드 입출력 데이터에 대한 처리가 지연되는 경우 즉시 반환 버퍼 , 채널 , 셀렉터 버퍼 실제 데이터를 담는 구조체 채널 데이터의 소스와 목적지에 대한 실제의 입출력 통로 셀렉터 입출력을 감시하는 역할. 버퍼. 특징 데이터를 처리하기 위한 메모리 영역을 사전에 확보 크기 변경 불가 기본형 데이터만의 수용 접근 메서드와 접근 위치 속성의 제공. 버퍼.

Download Presentation

19 장 : NIO

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 19장: NIO 클릭하세요 자바2 JDK 1.4

  2. NIO 개요 • 블록킹 모드 • 기존 스트림 입출력은 블록킹(blocking) 모드로 입출력을 처리 • 논-블록킹 모드 • 입출력 데이터에 대한 처리가 지연되는 경우 즉시 반환 • 버퍼, 채널, 셀렉터 • 버퍼 • 실제 데이터를 담는 구조체 • 채널 • 데이터의 소스와 목적지에 대한 실제의 입출력 통로 • 셀렉터 • 입출력을 감시하는 역할 클릭하세요 자바2 JDK 1.4

  3. 버퍼 • 특징 • 데이터를 처리하기 위한 메모리 영역을 사전에 확보 • 크기 변경 불가 • 기본형 데이터만의 수용 • 접근 메서드와 접근 위치 속성의 제공 클릭하세요 자바2 JDK 1.4

  4. 버퍼 • 버퍼의 생성 • 버퍼는 배열의 Wrapper 클래스 • 버퍼의 구조 • capacity • 버퍼에 저장할 수 있는 전체 요소의 수 • limit • 버퍼에 데이터를 넣을 수 있는 범위 • position • 데이터 접근 메서드가 접근할 곳의 위치 • mark • 버퍼의 특정 위치를 기억할 때 이용 • 코드 1 실습 클릭하세요 자바2 JDK 1.4

  5. 데이터 접근 메서드 • 버퍼에서 데이터 읽기 • get() 메서드의 이용 • 버퍼의 종류에 따라서, 다른 데이터형이 반환 • 상대적 위치와 절대적 위치의 접근이 존재 • 표 2 참조 • 버퍼에서 데이터 쓰기 • put() 메서드의 이용 • 버퍼의 종류에 따라서, 다른 형태의 데이터를 인자로 사용 • 표 3 참조 • ByteBuffer와 다른 버퍼의 관계 • 뷰버퍼: ByteBuffer는 다른 기본형 버퍼로 사용 가능 • 코드 2, 코드 3, 코드 4 실습 클릭하세요 자바2 JDK 1.4

  6. 채널 • 기존 스트림에서는 버퍼에 접근 불가 • 채널은 버퍼와 데이터 소스/목적지와의 연결 클릭하세요 자바2 JDK 1.4

  7. 채널 인터페이스와 클래스 • ReadableByteChannel • 채널에서 읽어서 바이트 버퍼에 쓰는 인터페이스 • WritableByteChannel • 버퍼에서 데이터를 읽어서 채널에 쓰는 인터페이스 • ByteChannel • 양방향의 채널 인터페이스 • InterruptibleChannel • 다른 쓰레드가 닫을 수 있는 채널 인터페이스 • FileChannel • 파일 입출력에 대한 채널 클래스 • SocketChannel • 소켓에 대한 채널 입출력에 대한 채널 클래스 • ServerSocketChannel • 서버 소켓에 대한 채널 입출력을 제공하는 클래스 클릭하세요 자바2 JDK 1.4

  8. 파일 채널 • 파일 입출력 스트림과 RandomAccessFile 클래스에서만 사용 가능 • read()와 write()는 버퍼와 채널간의 데이터 이동에 사용됨 • 코드 5 실습 • 입출력 방향 • 스트림으로부터 생성된 경우, 스트림의 방향에 따라 입출력의 방향이 정해짐 • 코드 6 실습 클릭하세요 자바2 JDK 1.4

  9. 소켓 채널 & 서버소켓 채널 • 소켓 채널 • open() 메서드를 통한 직접 생성 • 블록킹 모드에서의 소켓 채널 사용 • 일반 소켓 사용과 유사 • InetSocketAddress의 사용 • 코드 7 실습 • 서버소켓 채널 • open() 메서드를 통한 직접 생성 • 서버 소켓 채널의 socket을 이용해서 바인딩 • accept() 메서드의 처리 • 코드 8 실습 클릭하세요 자바2 JDK 1.4

  10. 셀렉터 • 논-블록킹 • 입출력 데이터가 없다면, 바로 반환 • 입출력 데이터의 감시는 Selector가 처리 클릭하세요 자바2 JDK 1.4

  11. 셀렉터 (2) • 채널의 논-블로킹 모드의 설정 configureBlocking(false); • Selector의 생성 및 등록 • Selector의 생성 • 채널 등록 • select() 메서드의 처리 • 입출력 요청의 처리 클릭하세요 자바2 JDK 1.4

  12. 논-블록킹 초간단 채팅 서버 • 클라이언트 • 데이터가 있는 경우 채널에 데이터 넣기 • 데이터가 도착하면, 화면에 표시하기 • 코드 9 실습 • 서버 • Accept 셀렉터와 Receive 셀렉터의 분리 • Thread 1 • Accept 셀렉터에서 서버 소켓 채널에 이를 알린다. • Thread 2 • Receive 셀렉터에서 데이터가 도착하면, 이를 모든 채널들에 브로드캐스트한다. • 코드 10 실습 클릭하세요 자바2 JDK 1.4

More Related