Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| 8 | 9 | 10 | 11 | 12 | 13 | 14 |
| 15 | 16 | 17 | 18 | 19 | 20 | 21 |
| 22 | 23 | 24 | 25 | 26 | 27 | 28 |
| 29 | 30 | 31 |
Tags
- path
- qwen3-coder-next
- 시작하기
- html canvas
- vscode
- tauri
- FileChannel
- podman compose
- Typescript
- getting started
- Java
- .dockerignore
- cli
- 절대경로
- Vite
- dockerfile
- Ollama
- config
- File
- Webpack
- docker
- podman
- curl
- React
- glm-ocr
- Docker Compose
- io
- RandomAccessFile
Archives
- Today
- Total
워로디스
Java IO RandomAccessFile + FileChannel 예제 본문
Java NIO (New Input/Output)에서 채널(Channel)은 파일이나 네트워크 소켓 등의 I/O 서비스에 대한 연결을 나타냅니다. Java NIO의 FileChannel 클래스는 파일에 대한 랜덤 엑세스를 가능하게 합니다. 이 클래스를 사용하면 파일의 특정 위치로 이동하여 데이터를 읽거나 쓸 수 있습니다.
RandomAccessFile 클래스와 함께 FileChannel을 사용하여 파일에 랜덤 엑세스를 수행할 수 있습니다. 예를 들어, 파일에서 특정 위치로 이동하고 데이터를 읽거나 쓰는 것이 가능합니다.
다음은 Java NIO를 사용하여 파일에 랜덤 엑세스하는 간단한 예제입니다.
import java.io.RandomAccessFile;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;
public class RandomAccessExample {
public static void main(String[] args) {
try {
RandomAccessFile file = new RandomAccessFile("example.txt", "rw");
FileChannel channel = file.getChannel();
// 버퍼 생성
ByteBuffer buffer = ByteBuffer.allocate(48);
// 파일의 특정 위치로 이동
channel.position(100);
// 데이터 읽기
int bytesRead = channel.read(buffer);
// 데이터 쓰기
String newData = "New Data";
buffer.clear();
buffer.put(newData.getBytes());
buffer.flip();
while (buffer.hasRemaining()) {
channel.write(buffer);
}
channel.close();
file.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
이 예제에서는 RandomAccessFile을 "rw" 모드(읽기 및 쓰기 모드)로 열고, 이를 통해 FileChannel을 얻습니다. 그 후 ByteBuffer를 사용하여 파일의 특정 위치로 이동하고 데이터를 읽거나 쓸 수 있습니다.
RandomAccessFile만 사용하는 것과 FileChannel을 추가로 사용하는 것 사이에는 여러 차이점과 장점이 있습니다. FileChannel을 사용하는 주요 장점은 다음과 같습니다.
- 성능 향상:
FileChannel은 네이티브 I/O 연산을 사용하여 성능을 향상시킵니다. 이는 특히 대용량 데이터를 처리할 때 중요합니다.FileChannel은 시스템의 기본 I/O 기능을 더 효율적으로 사용하여 빠른 데이터 전송을 가능하게 합니다. - 비동기 I/O:
FileChannel은 비동기 I/O 작업을 지원합니다. 이는 I/O 작업을 수행하는 동안 다른 작업을 계속할 수 있음을 의미합니다. 이는 애플리케이션의 전반적인 반응성과 성능을 개선할 수 있습니다. - 메모리 매핑:
FileChannel을 사용하면 파일을 메모리에 매핑할 수 있습니다. 이는 매우 큰 파일을 효율적으로 처리할 때 유용합니다. 메모리 매핑을 통해 파일의 일부를 메모리에 직접 매핑하여, 파일 I/O를 메모리 연산처럼 수행할 수 있습니다. - 버퍼를 이용한 데이터 전송:
FileChannel은ByteBuffer를 사용하여 데이터를 읽고 씁니다. 이는 데이터를 더 효율적으로 관리하고, 대량의 데이터를 빠르게 전송하는 데 도움이 됩니다. - 다른 채널과의 직접적인 데이터 전송:
FileChannel은 한 채널에서 다른 채널로 데이터를 직접 전송하는 기능을 제공합니다 (transferTo와transferFrom메소드). 이는 중간 버퍼를 사용하지 않고도 효율적으로 데이터를 전송할 수 있게 해줍니다. - 락 기능:
FileChannel은 파일에 대한 락(lock)을 설정할 수 있는 기능을 제공합니다. 이는 다중 스레드 환경이나 다중 프로세스 환경에서 파일의 동시 접근을 제어하는 데 유용합니다.
결론적으로, FileChannel을 사용하면 더 높은 성능, 효율적인 데이터 관리, 비동기 처리, 메모리 매핑 등의 이점을 얻을 수 있어, 특히 대용량 데이터 처리나 복잡한 I/O 요구 사항이 있는 애플리케이션에서 유리합니다.
'정리 > Java' 카테고리의 다른 글
| Java IO RandomAccessFile 만으로 파일 읽기 (0) | 2026.02.04 |
|---|---|
| Java IO 절대경로 여부 확인 (0) | 2026.02.04 |
