여기서는 파일을 MappedByteBuffer
으로 액세스 할 수있는 메모리에 매핑 할 수있는 FileChannel.map
메서드에 대한 것이라고 가정합니다. FileChannel.map
방법에 대한 설명서
파일은 읽기 전용으로 맵핑되는 경우, 버퍼를 수정하는 시도는
ReadOnlyBufferException
될 것이다
는
파일의 영역에 맵핑 될 수있다 세 가지 모드 중 하나 메모리 :
- 읽기 전용 : 을 수정하려는 시도가 결과 버퍼가
ReadOnlyBufferException
가 슬로우됩니다.
예외 : (MapMode.READ_ONLY
)
ByteBuffer.array
방법에 의해 발생 예외의 관점에서
문제에 대한 이유에 따라 슬로우되는 예외의 두 가지 유형
ReadOnlyBufferException
-이 버퍼가 어레이에 의해 뒷받침되지만 읽기 전용 인 경우
UnsupportedOperationException
- 버퍼가 액세스 배열에 연동되지 않으면
발생되는 예외는 질문에서 언급되어 있지 않지만, 아마도 파일은 읽기 전용되는 array
방법에 의해 발생 될 ReadOnlyBufferException
일으키는 .
이 완충액 (옵션)를 보조하는 바이트 배열을 반환
또한,도 ByteBuffer.array
방법은 임의의 오퍼레이션이라고 언급한다.
가 hasArray
메소드를 호출 이를 호출하기 전에 :
는
array
방법에 대한 설명서에 제시된대로
array
방법은 사용할 수있는
byte[]
을 반환
hasArray
메소드를 호출하는지 확인하려면 메서드를 사용하여 에이 버퍼에 액세스 가능 백업 배열이 있는지 확인하십시오.
물론 배열은 메모리에서 이동할 수 있으며 메모리 매핑 된 파일이나 직접 할당 된 버퍼와 잘 맞지 않는 헤더를 가질 수 있습니다. –
그들이 메모리 맵핑되면, 그들은 움직이지 않을 것입니다 ... – vy32
이것은 질문에 답해 주지만, 제가 원했던 대답이 아닙니다. POSIX mmap()에는 읽기 전용 메모리 매핑 문제가 없습니다. 자바도 그렇게해야합니다. – vy32