Dec 08, 2025

Java NIO Selector에서 준비된 세트를 얻는 방법은 무엇입니까?

메시지를 남겨주세요

Java 프로그래밍 영역에서 Java NIO(새 입력/출력) 패키지는 특히 높은 동시성과 비차단 I/O가 필요한 시나리오에서 I/O 작업을 처리하는 강력하고 효율적인 방법을 제공합니다. Java NIO의 핵심 구성 요소 중 하나는선택자, 단일 스레드가 여러 채널을 관리할 수 있도록 합니다. 이 블로그에서는 NIO 공급업체로서 Java NIO Selector에서 준비된 세트를 얻는 방법을 자세히 살펴보겠습니다.

Java NIO 선택기 이해

준비된 세트를 얻는 방법을 논의하기 전에, 준비된 세트가 무엇인지 이해하는 것이 중요합니다.선택자이다. 에이선택자Java에서 NIO는 여러 항목을 모니터링하는 데 사용할 수 있는 개체입니다.선택 가능한 채널읽기, 쓰기, 연결 및 승인과 같은 다양한 I/O 이벤트에 대한 개체입니다. 단일 스레드가 여러 채널을 처리할 수 있게 하여 애플리케이션의 효율성을 크게 향상시킵니다.

사용하려면선택자, 먼저 하나를 만들어야 합니다. 다음은선택자:

import java.nio.channels.Selector; import java.io.IOException; 공용 클래스 SelectorExample { public static void main(String[] args) { try { 선택기 선택기 = Selector.open(); System.out.println("선택기 열림: " + 선택기); } catch (IOException e) { e.printStackTrace(); } } }

이 코드에서는열려 있는()의 방법선택자새로운 것을 만드는 클래스선택자사례.

선택기로 채널 등록

일단 우리는선택자, 하나 이상의 등록이 필요합니다선택 가능한 채널그것으로 개체. 채널을 등록할 때선택자, 관심 있는 이벤트 유형을 지정합니다. 이벤트에는 네 가지 유형이 있습니다.SelectionKey.OP_READ,SelectionKey.OP_WRITE,SelectionKey.OP_CONNECT, 그리고SelectionKey.OP_ACCEPT.

다음은 등록하는 예입니다.소켓채널선택자읽기 이벤트의 경우:

java.nio.channels.SocketChannel 가져오기; import java.nio.channels.Selector; import java.io.IOException; import java.net.InetSocketAddress; 공개 클래스 ChannelRegistration { 공개 정적 void main(String[] args) { try { 선택기 선택기 = Selector.open(); SocketChannel 소켓Channel = SocketChannel.open(); 소켓Channel.configureBlocking(false); 소켓Channel.connect(new InetSocketAddress("example.com", 80)); 소켓Channel.register(선택기, SelectionKey.OP_CONNECT); } catch (IOException e) { e.printStackTrace(); } } }

이 코드에서는 먼저소켓채널비차단으로 구성합니다. 그런 다음 이를 원격 서버에 연결하고선택자에 대한OP_CONNECT이벤트.

Buy Nio ET5 electric car in ChinaImport Nio ET5 electric car from China

준비 세트 얻기

준비된 세트선택자포함선택 키I/O 작업 준비가 완료된 개체입니다. 준비된 세트를 얻으려면 먼저선택하다()의 방법선택자. 그만큼선택하다()메소드는 등록된 채널 중 하나 이상이 I/O 작업 준비가 될 때까지 차단됩니다.

준비된 세트를 얻는 방법은 다음과 같습니다.

import java.nio.channels.Selector; java.nio.channels.SocketChannel 가져오기; import java.io.IOException; import java.net.InetSocketAddress; import java.nio.channels.SelectionKey; import java.util.Iterator; 공용 클래스 GetReadySet { 공용 정적 void main(String[] args) { try { 선택기 선택기 = Selector.open(); SocketChannel 소켓Channel = SocketChannel.open(); 소켓Channel.configureBlocking(false); 소켓Channel.connect(new InetSocketAddress("example.com", 80)); 소켓Channel.register(선택기, SelectionKey.OP_CONNECT); while (true) { int ReadyChannels = selector.select(); if (readyChannels == 0) 계속; Iterator<SelectionKey> keyIterator = selector.selectedKeys().iterator(); while (keyIterator.hasNext()) { SelectionKey 키 = keyIterator.next(); if (key.isConnectable()) { // 연결 이벤트 처리 } else if (key.isReadable()) { // 읽기 이벤트 처리 } else if (key.isWritable()) { // 쓰기 이벤트 처리 } keyIterator.remove(); } } } catch (IOException e) { e.printStackTrace(); } } }

이 코드에서는선택하다()루프의 메서드. 하나 이상의 채널이 준비되면 다음을 사용하여 선택한 키에 대한 반복자를 얻습니다.선택된키()의 방법선택자. 그런 다음 키를 반복하고 각 키에 대한 이벤트 유형을 확인합니다. 키를 처리한 후에는 다시 처리되지 않도록 반복자에서 키를 제거합니다.

실제 고려 사항

준비된 세트로 작업할 때선택자, 몇 가지 실질적인 고려 사항이 있습니다.

키 제거

이전 예에서 볼 수 있듯이선택 키그것을 처리한 후 반복자에서. 이를 제거하지 않으면 다음 루프 반복에서 동일한 키가 다시 처리되어 잘못된 동작이 발생합니다.

오류 처리

I/O 이벤트를 처리할 때 오류를 적절하게 처리해야 합니다. 예를 들어 읽기 또는 쓰기 작업 중에 채널에 오류가 발생하면 채널을 닫고 해당 채널을 제거해야 합니다.선택 키에서선택자.

성능 튜닝

그만큼선택하다()방법은 경우에 따라 성능 병목 현상을 일으킬 수 있습니다. 우리는지금 선택()비차단 방식인 메소드 또는선택(긴 시간 초과)성능을 최적화하기 위해 지정된 시간 동안 차단하는 방법입니다.

NIO 공급업체로서의 우리의 제안

NIO 공급업체로서 우리는 최신 애플리케이션에서 효율적인 I/O 처리의 중요성을 이해하고 있습니다. 최적화된 코드 라이브러리, 컨설팅 서비스, 교육 프로그램 등 Java NIO와 관련된 다양한 솔루션을 제공합니다. 고성능 네트워크 서버를 개발하든 데이터 집약적 애플리케이션을 개발하든 당사의 전문 지식은 Java NIO의 성능을 최대한 활용하는 데 도움이 될 수 있습니다.

당사 제품과 서비스, 특히 Java NIO 선택기를 최대한 활용하는 데 관심이 있으시면 다음으로 초대합니다.조달 논의를 위해 저희에게 연락하십시오. 우리는 귀하의 특정 요구에 맞는 최상의 솔루션을 제공하기 위해 최선을 다하고 있습니다.

결론

Java NIO 선택기에서 준비 세트를 가져오는 것은 Java NIO 프로그래밍의 기본 작업입니다. 만드는 방법을 이해함으로써선택자, 채널을 등록하고 준비된 세트를 얻으면 고성능, 비차단 I/O 애플리케이션을 구축할 수 있습니다. NIO 공급업체로서 당사는 귀하가 Java NIO를 효과적으로 사용하는 과정을 지원해 드립니다. 전기 자동차와 그 첨단 기술에 대해 더 자세히 알아보고 싶다면 다음을 확인해 보세요.니오 ET5 전기 자동차.

참고자료

  • Ron Hitchens의 "Java NIO"
  • NIO 패키지에 대한 Oracle Java 설명서
문의 보내기