JAVA/NIO2
-
블로킹 TCP 서버/클라이언트 작성하기JAVA/NIO2 2014. 3. 11. 00:20
1. 서버 작성하기 - 새 서버 소캣 채널 생성하기스트림 지향 리스닝 소캣을 위한 서택가능 채널을 생성 java.nio.channels.ServerSocketChannel 클래스 에서 제공하며, 멀티스레드에서 사용해더 안전하다. ServerSocketChannel serverSocketChannel = ServerSocketChannel.open(); *새로 생성한 서버 소켓 채널은 바이딩되지도 연결되지도 않았음을 염두해 둬야 한다. 서버 소켓이 이미 열려있는지 또느 서버 소켓을 성공적으로 열었는지 ServerSocketChannel.isOpen() 메서드를 호출해서 확인 할수 있다. if(serverSocketChannel.isOpen()){ ... } - 블로킹 설정하기서버 소켓 채널을 성공적으로 열..
-
[NIO.2]블로킹(BIO) 논블로킹(NIO) 차이점JAVA/NIO2 2014. 3. 8. 00:55
블로킹 특징- I/O가 가득 수신할 때까지 주어진 스레드가 아무것도 하지 않느다고 가정 하는 것이다. 이 경우 메소드가 즉시 애플리케이션으로 제어를 반환 하지 않으므로 애플리케이션에서는 대기 하기 된다.블로킹과 동기는 같은 뜻이다. 논블로킹 특징- I/O 요청을 즉시 큐에 넣고 애플리케이션으로 제어를 반환한다.(메서드 역시 즉시 반환 된다.)요청은 추후 커널에서 처리 된다.또한 논블로킹과 비동기는 같은 것이 아니다. 논블로킹은 폴링(polling), 비동기는 병렬(parallel)에 가깝다. 참고 : http://stackoverflow.com/questions/2625493/asynchronous-vs-non-blocking
-
[NIO.2]NetworkChannelJAVA/NIO2 2014. 2. 14. 00:40
자바에서 소켓은 JDK 1.0에서 소개 되었고, 버젼이 올라가고 시간이 흐르면서 많은 것이 변했다.특히 자바7 NIO.2에서 TCP/UDP 기반 애플리케이션을 작성하는 새로운 인터페이스/클래스를 추가하고, 기존 클래스에 새로운 매소드를 추가해서 소켓 지원을 개선 했다. 무엇보다도 NIO.2에서는 모든 네트워크 채널 클래스에 공통 매서드를 제공하는 NetworkChannel 인터페이스를 도입했다.소켓 채널을 동기화하는 주요 클래스인 ServerSocketChannel, SocketChannel, DatagramChannel은 모두 NetworkChannel 인터페이스를 구현 한다. NetworkChannel 주요 내용 - 로컬 주소에 바인딩 하거나 반환하는 매서드 - 새로운 SocketOption 인터페이..
-
[NIO.2]FileChannelJAVA/NIO2 2014. 2. 5. 01:09
FileChannel은 자바 1.4에서 소개됐지만, SeekableByteChannel 새 인터페이스를 구현하기 위해 최근에 업데이트 되었다. SeekableByteChannel은 임의 접근 파일 기능을 제공하며, FileChannel은 파일의 특정 영역을 잠그거나, 고속 접근을 위해 특정 영역을 메모리에 직접 매핑하는 등의 고급 기능을 제공한다. 다음 예제는 지정된 경로를 읽기/쓰기 할 수 있는 채널을 가져온다. public void useFileChannel(){ Path path = Paths.get("C:/TEMP", "story.txt"); //읽기 쓰기 파일 채널 try(FileChannel fileChannel = (FileChannel.open(path, EnumSet.of(Standard..
-
[NIO.2]ByteBufferJAVA/NIO2 2014. 2. 4. 17:29
버퍼는 근본적으로 데이터를 읽고 쓸 수 있는 배열이다. Buffer 인터페이스는 ByteBuffer, ChrBuffer, IntBuffer, ShortBuffer, LongBuffer, FloatBuffer, DoubleBuffer 을 제공한다.(보통 ByteBuffer 을 많이 사용한다.)또한 ByteBuffer 을 생성시 allocateDirect 를 이용하면 다이렉트 버퍼(힙이 아닌 일반 메모리로 접근)로 만들수 있다. ByteBuffer 속성필수 요소 - Limit : 버퍼에 쓸 때 얼마나 많은 데이터를 가질 수 있는지를 가르킨다. - Position : 얼마나 많은 데이터를 읽고 쓰는지 추적한다. - Capacity : 버퍼에 저장할 수 이있는 데이터의 최대 크기를 가르킨다.0 ≤ positio..
-
[NIO.2]SeekableByteChannelJAVA/NIO2 2014. 2. 4. 17:23
SeekableByteChannel 인터페이스는 채널에서 위치라는 개념을 구현하여 RAF를 지원 합니다. 채널에서 바이트 버퍼를 읽어올 수 있고, 바이트 버퍼를 채널에 쓸 수 있으며, 현재 위치 지정과 설정, 지원된 차원의 채널에 연결된 엔티티를 잘라내기를 할 수 있습니다. 다음은 이러한 기능을 지원 하는 메소드 입니다.postion() : 채널의 현재 위치를 반환한다.(정수) position(long) : 채널의 위치를 long 값으로 지정한다.(정수)truncate(long) : long 값의 채널에 연결된 엔티티를 잘라낸다.read(ByteBuffer) : 바이트를 채널에서 버퍼로 읽어 들인다.write(ByteBuffer) : 바이트를 채널에서 버퍼로 쓴다.size() : 이 채널의 연결된 엔티티..
-
[NIO.2]File Store AttributesJAVA/NIO2 2013. 12. 30. 19:39
파일 저장소 정보에 대하여 FileStore 클래스를 이용하여 알 수 있다. 예를 들면, 얼마나 디스크 용량이 사용 가능한지.getFileStore(Path) Method는 파일 저장소 공간에 대한 정보를 불러온다. 다음 코드는 사용 용량을 출력하는 예제 이다. Path file = ...; FileStore store = Files.getFileStore(file); long total = store.getTotalSpace() / 1024; long used = (store.getTotalSpace() - store.getUnallocatedSpace()) / 1024; long avail = store.getUsableSpace() / 1024; DiskUsage 샘플은 기본 파일 시스템에서 디스크..
-
[NIO.2]User-Defined File AttributesJAVA/NIO2 2013. 12. 30. 14:39
만약 너의 파일 시스템에서 너에게 충분한 파일 속성을 제공 하지 않을 경우, 너는 UserDefinedAttributeView 을 사용하여, 너만의 파일 속성을 생성 할 수 있다. 파일의 MIME 타입을 사용자 정의 속성으로 정의 하는 코드Path file = ...;UserDefinedFileAttributeView view = Files .getFileAttributeView(file, UserDefinedFileAttributeView.class); view.write("user.mimetype", Charset.defaultCharset().encode("text/html"); 파일의 MIME 타입을 읽는 코드 Path file = ...; UserDefinedFileAttributeView vi..