[출근길 공부 007] File을 memory로 mapping 시키는 방법들

이태훈·2025년 10월 2일

출근길 공부

목록 보기
7/11

Java에서 file을 memory로 mapping시키는 방법은 두 가지가 있다.

  1. ByteBuffer
val channel = FileChannel.open(file.toPath(), StandardOpenOption.READ)
val byteBuffer = channel.map(FileChannel.MapMode.READ_ONLY, 0L, size)
  1. Arena
val arena = Arena.ofConfined()
val channel = FileChannel.open(file.toPath(), StandardOpenOption.READ)
channel.map(FileChannel.MapMode.READ_ONLY, 0L, size, arena)

여기서 arena는 Java 22에서 추가된 JVM에서 native memory segments를 관리하는 foreign function api이다..

덧붙여 Android에서 주로 사용하던 file system은 FileInputStream/FileOutputStream인데, 여기에서는 FileChannel이 나왔다.

그래서 FileChannel에 대하여 조금 알아보겠다..

FileChannel은 Java NIO에서 나온 개념으로, FileOutputStream에 비해 큰 파일, 랜덤 액세스 및 성능이 중요한 곳에서 처리하는데 적합하다.

그렇다고 무조건 FileOutputStream, FileInputStream을 쓰는 것보다 FileChannel이 좋은가? 라고 하면 그렇지는 않다.

FileChannel은 랜덤액세스 및 lock 기능 등등의 기능을 제공하기 때문에 불특정 다수의 스레드에서 접근하거나, 일시정지 및 재개와 같은 다운로드 전략이 필요할 때 혹은 용량이 큰 파일의 경우에 선택하면 된다.

Android 환경에서는 FileChannel을 쓸 일이 많지는 않을 것 같다..

현재 프로젝트에서.. 빌드를 시작할 때 임베디드 모듈을 받아오는 과정이 있는데 해당 모듈의 용량이 몇백mb 정도는 되어서 여기에 적용해볼법할 것 같다..

profile
https://www.linkedin.com/in/%ED%83%9C%ED%9B%88-%EC%9D%B4-7b9563237

0개의 댓글