본문 바로가기

Java

(3)
[NIO] FileChannel 과 FileInput/Output Stream 과의 차이 FileChannel 은 Java의 java.nio.channels 패키지에 속하는 클래스로, 파일에서 데이터를 읽고, 쓰고, 매핑하는 기능을 제공한다. FileChannel은 입출력(I/O) 작업에 대해 더 높은 성능과 유연성을 제공하는 NIO (New Input/Output)의 핵심 요소 중 하나이다. 이 클래스는 버퍼와 채널을 사용하여 파일의 데이터를 직접 조작할 수 있는 메커니즘을 제공하여, 기존의 FileInputStream, FileOutputStream, RandomAccessFile 등을 통한 데이터 처리 방식보다 더 효율적인 작업이 가능하다. FileChannel의 주요 역할 읽기 및 쓰기 작업: FileChannel을 통해 파일의 특정 위치에서 데이터를 읽거나 쓸 수 있다. 이를 통해 ..
[NIO] Selection 네트워크 프로그래밍을 위한 새 I/O API 의 두 번째 부분은 준비된 것을 선택하는 것이다. 준비된 채널을 선택함으로써 읽고 쓸때 블록하지 않아도 된다. 이 내용은 주로 서버의 관심사이지만, 여러 개의 창을 띄워서 동시에 여러 연결을 시도하는 웹 스파이더나 브라우저 같은 클라이언트 프로그램에서도 활용할 수 있다. 준비된 것을 선택하기 위해서는 서로 다른 채널들이 Selector 객체에 등록되어야 하며, 이때 각 채널에 할당되는 SelectionKey 가 사용된다. 그리고 나서 프로그램은 Selector 객체에게 작업을 수행할 준비가 된 채널 키의 세트를 요청한다. Selector class 셀렉터에 있는 유일한 생성자는 protected 로 선언되어 있다. 일반적으로 새로운 셀렉터는 정적 팩토리 메소드..
[NIO] Socket Channel 채널은 파일, 소켓, 데이터그램 등과 같은 다양한 I/O 소스로부터 데이터 블록을 버퍼로 쓰거나 읽어온다. 네트워크 프로그래밍을 위해서는 SocketChannel, ServerSocketChannel, DatagramChannel 세개가 가장 중요하다. 그리고 TCP 연결을 위해서는 이 중에서도 앞의 두 개의 채널만 필요하다. 1. SocketChannel class SocketChannel 클래스는 TCP 소켓에 대해 읽고 쓴다. 읽고 쓸 데이터는 ByteBuffer 객체로 먼저 인코딩 되어야 한다. 각각의 SocketChannel 은 Socket 객체와 연결되어 있다. 연결하기 SocketChannel 클래스는 public 으로 선언된 생성자를 제공하지 않는다. 대신에 다음 두 정적 open() 메소..