MappedByteBuffer — 파일 매핑 버퍼
MappedByteBuffer — 파일 매핑 버퍼
메모리 맵 파일(memory-mapped file)을 나타내는 직접 바이트 버퍼예요. FileChannel.map 메서드로 파일의 영역을 메모리에 매핑해 만든 버퍼예요. 파일 내용이 가상 메모리에 매핑되어, 버퍼를 통해 파일을 읽고 쓸 수 있어요. 이 버퍼는 항상 직접(direct) 버퍼이며, 파일에 대한 접근을 운영체제의 가상 메모리 시스템에 위임해요.
본문
메모리 맵 버퍼의 내용은 언제든지 다른 프로그램이 바꿀 수 있어요(파일을 직접 수정하는 경우). 이 버퍼에 매핑된 파일 영역을 수정하는 방법은 매핑 모드에 따라 달라지며, 파일 등 저장 위치에 반영되는 시점도 구현에 따라 달라요. 매핑된 버퍼의 내용을 강제로 저장 장치에 기록하려면 force 메서드를 사용해요.
주요 메서드
public final boolean isLoaded()— 이 버퍼의 내용이 물리 메모리에 상주하는지 여부를 반환해요.true반환은 내용이 메모리에 있다는 것을 의미하며,false반환은 그렇지 않다는 것을 확실하게 의미해요.public final MappedByteBuffer load()— 이 버퍼의 내용을 물리 메모리에 로드해요. 반환 시점에 이 버퍼의 내용이 메모리에 있도록 최선을 다해 노력해요.public final MappedByteBuffer force()— 이 버퍼의 내용에 대한 변경 사항을, 매핑된 파일이 들어 있는 저장 장치에 기록하도록 강제해요. 전체 영역에 대해 적용돼요.public final MappedByteBuffer force(int index, int length)— 이 버퍼 내용의 특정 영역에 대한 변경 사항을 저장 장치에 기록하도록 강제해요.index부터length까지의 영역에 적용돼요.public final MappedByteBuffer position(int newPosition)— 이 버퍼의 position을 설정해요. mark가 정의되어 있고 새 position보다 크면 mark는 버려져요.public final MappedByteBuffer limit(int newLimit)— 이 버퍼의 limit을 설정해요.public final MappedByteBuffer mark()— 이 버퍼의 표시를 position에 설정해요.public final MappedByteBuffer reset()— position을 이전에 표시한 위치로 리셋해요.public final MappedByteBuffer clear()— 이 버퍼를 비워요. position은 0, limit은 capacity, mark는 버려져요.public final MappedByteBuffer flip()— 이 버퍼를 플립해요. limit은 현재 position, position은 0이 돼요.public final MappedByteBuffer rewind()— 이 버퍼를 되감아요. position은 0, mark는 버려져요.public abstract MappedByteBuffer slice()— 이 버퍼 내용의 공유 하위 시퀀스인 새 바이트 버퍼를 만들어요.public abstract MappedByteBuffer slice(int index, int length)— 이 버퍼 내용의 공유 하위 시퀀스인 새 바이트 버퍼를 만들어요.public abstract MappedByteBuffer duplicate()— 이 버퍼의 내용을 공유하는 새 바이트 버퍼를 만들어요.public abstract MappedByteBuffer compact()— 이 버퍼를 컴팩트해요(선택 연산).
FileChannel channel = FileChannel.open(Paths.get("data.bin"),
StandardOpenOption.READ, StandardOpenOption.WRITE);
MappedByteBuffer buf = channel.map(FileChannel.MapMode.READ_WRITE, 0, channel.size());
buf.putInt(0, 42); // 파일의 첫 4바이트에 int 기록
buf.force(); // 저장 장치로 강제 반영