안녕하세요! NIO 공급업체로서 Java NIO에서 비동기 파일 I/O를 수행하는 방법에 관해 공유할 내용이 한두 가지 있습니다. 꽤 멋진 주제인데, 여러분에게 그 내용을 안내해드릴 수 있어서 기쁩니다.
먼저, 비동기 파일 I/O가 왜 그렇게 중요한지에 대해 이야기해 보겠습니다. 기존 I/O 작업에서는 작업이 완료될 때까지 스레드가 차단됩니다. 즉, 그 동안에는 다른 작업을 수행할 수 없으며 특히 대용량 파일이나 다중 I/O 작업을 처리할 때 실제로 방해가 될 수 있습니다. 반면, 비동기 I/O를 사용하면 I/O 작업이 진행되는 동안 스레드가 다른 작업을 계속 수행할 수 있습니다. 중요한 일에 집중하는 동안 지루한 일을 처리해 주는 도우미가 있는 것과 같습니다.
그렇다면 Java NIO에서 비동기 파일 I/O를 어떻게 수행합니까? Java NIO(New I/O)는 비동기 I/O 작업을 상대적으로 쉽게 해주는 일련의 클래스와 인터페이스를 제공합니다. 주요 클래스 중 하나는비동기파일채널. 이 클래스를 사용하면 파일에 대한 비동기 읽기 및 쓰기 작업을 수행할 수 있습니다.
비동기적으로 파일을 읽는 간단한 예부터 시작해 보겠습니다. 시작하는 데 도움이 되는 몇 가지 코드는 다음과 같습니다.
import java.nio.ByteBuffer; java.nio.channels.AsynchronousFileChannel 가져오기; import java.nio.file.Path; import java.nio.file.Paths; import java.nio.file.StandardOpenOption; import java.util.concurrent.Future; 공용 클래스 AsyncFileReadExample { 공용 정적 void main(String[] args) { try { 경로 경로 = Paths.get("test.txt"); AsynchronousFileChannel fileChannel = AsynchronousFileChannel.open(경로, StandardOpenOption.READ); ByteBuffer 버퍼 = ByteBuffer.allocate(1024); Future<Integer> result = fileChannel.read(buffer, 0); while (!result.isDone()) { // 읽기 작업이 진행되는 동안 다른 작업을 수행합니다. System.out.println("Doing other task..."); } int bytesRead = 결과.get(); System.out.println("읽은 바이트 수: " + bytesRead); buffer.flip(); 바이트[] 데이터 = 새 바이트[buffer.limit()]; buffer.get(데이터); System.out.println(새 문자열(데이터)); fileChannel.close(); } catch(예외 e) { e.printStackTrace(); } } }
이 예에서는 먼저비동기파일채널독서를 위해. 그런 다음 우리는바이트버퍼우리가 읽을 데이터를 보관하기 위해. 우리는읽다의 방법비동기파일채널읽기 작업을 비동기적으로 시작합니다. 이 메소드는미래비동기 작업의 결과를 나타내는 개체입니다.
우리는완료됨의 방법미래작업이 완료되었는지 확인하는 개체입니다. 작업이 완료되지 않은 동안 다른 작업을 수행할 수 있습니다. 작업이 완료되면 다음을 사용합니다.얻다의 방법미래읽은 바이트 수를 가져오는 개체입니다.
이제 비동기적으로 파일을 작성하는 방법에 대해 이야기해 보겠습니다. 예는 다음과 같습니다.
import java.nio.ByteBuffer; java.nio.channels.AsynchronousFileChannel 가져오기; import java.nio.file.Path; import java.nio.file.Paths; import java.nio.file.StandardOpenOption; import java.util.concurrent.Future; 공용 클래스 AsyncFileWriteExample { 공용 정적 void main(String[] args) { try { 경로 경로 = Paths.get("output.txt"); AsynchronousFileChannel fileChannel = AsynchronousFileChannel.open(path, StandardOpenOption.WRITE, StandardOpenOption.CREATE); 문자열 데이터 = "Hello, World!"; ByteBuffer 버퍼 = ByteBuffer.wrap(data.getBytes()); Future<Integer> result = fileChannel.write(buffer, 0); while (!result.isDone()) { // 쓰기 작업이 진행되는 동안 다른 작업을 수행합니다. System.out.println("Doing other task..."); } int bytesWritten = result.get(); System.out.println("기록된 바이트 수: " + bytesWritten); fileChannel.close(); } catch(예외 e) { e.printStackTrace(); } } }
이 프로세스는 파일을 비동기적으로 읽는 것과 유사합니다. 우리는비동기파일채널쓰기를 위해 할당바이트버퍼우리가 쓰고 싶은 데이터를 가지고쓰다의 방법비동기파일채널쓰기 작업을 비동기적으로 시작합니다.
Java NIO에서 비동기 I/O를 처리하는 또 다른 방법은 완료 핸들러를 사용하는 것입니다. 완료 핸들러는 비동기 작업이 완료되면 알림을 받는 개체입니다. 다음은 완료 핸들러를 사용하여 파일을 비동기적으로 읽는 예입니다.
import java.nio.ByteBuffer; java.nio.channels.AsynchronousFileChannel 가져오기; import java.nio.channels.CompletionHandler; import java.nio.file.Path; import java.nio.file.Paths; import java.nio.file.StandardOpenOption; 공개 클래스 AsyncFileReadWithCompletionHandler { 공개 정적 void main(String[] args) { 시도 { 경로 경로 = Paths.get("test.txt"); AsynchronousFileChannel fileChannel = AsynchronousFileChannel.open(경로, StandardOpenOption.READ); ByteBuffer 버퍼 = ByteBuffer.allocate(1024); fileChannel.read(buffer, 0, buffer, new CompletionHandler<Integer, ByteBuffer>() { @Override public void done(Integer result, ByteBuffer attachment) { System.out.println("읽은 바이트 수: " + result); attachment.flip(); byte[] data = new byte[attachment.limit()]; attachment.get(data); System.out.println(new String(data)); try { fileChannel.close(); } catch (예외 e) { e.printStackTrace(); } } @Override public void failed(Throwable ex, ByteBuffer attachment) { ex.printStackTrace() } }); // 읽기 작업이 진행되는 동안 다른 작업을 수행합니다. System.out.println("Doing other task..."); } catch(예외 e) { e.printStackTrace(); } } }
이 예에서는완료 핸들러에 반대하다읽다의 방법비동기파일채널. 그만큼완전한의 방법완료 핸들러읽기 작업이 성공하면 호출됩니다.실패한작업이 실패하면 메서드가 호출됩니다.


NIO 공급업체로서 우리는 항상 성능과 효율성을 최적화할 수 있는 방법을 찾고 있습니다. Java NIO의 비동기 파일 I/O는 이러한 목표를 달성하기 위한 훌륭한 도구입니다. 특히 I/O 집약적인 작업을 처리할 때 애플리케이션의 응답성을 크게 향상시킬 수 있습니다.
고성능 전기차를 찾고 있다면, 확인해 보세요.니오 ET5 전기 자동차. 최첨단 기술과 세련된 디자인이 결합된 세련되고 강력한 차량입니다.
Java NIO에 대해 더 자세히 알고 싶거나 제품 및 서비스에 대해 궁금한 점이 있으면 주저하지 말고 문의하세요. 우리는 항상 기꺼이 대화를 나누고 귀하의 요구 사항에 대해 어떻게 도움을 드릴 수 있는지 알아보겠습니다. 애플리케이션의 I/O 성능을 최적화하고 싶거나 최신 Java 기술에 대한 조언이 필요하다면 우리가 도와드리겠습니다. 이제 본격적으로 시작하여 우리가 어떻게 함께 일할 수 있는지에 대한 대화를 시작하겠습니다.
참고자료:
- 자바 NIO 튜토리얼
- AsynchronousFileChannel에 대한 Oracle Java 설명서



























































