.array ()가 MAP의 FileChannels에서 반환 된 바이트 버퍼에서 작동하지 않습니까?

StackOverflow https://stackoverflow.com/questions/1054020

  •  20-08-2019
  •  | 
  •  

문제

자바에서 메모리 매핑 IO를하고 있습니다. Filechannel 클래스를 사용하면 바이 테 버퍼를 파일의 특정 부분에 매핑 할 수 있습니다. 파일이 열린 후 읽기 만하고 있습니다.

내가 가진 문제는 결과 바이 테 버퍼에서 .array () 메소드를 호출하려고 할 때 예외가 발생한다는 것입니다. 아마도 .array ()가 바이트 [] 배열을 반환하고 정말로 마무리 된 바이트 배열을 원하십니까?

이 주위에 어떤 방법이 있습니까?

도움이 되었습니까?

해결책

나는 이것이에 관한 것이라고 가정 할 것이다 FileChannel.map 파일을 메모리에 매핑 할 수있는 메소드 MappedByteBuffer.

문서에서 FileChannel.map 방법, 파일이 읽기 전용으로 매핑되면 버퍼를 수정하려는 모든 시도는 ReadOnlyBufferException:

파일의 영역은 세 가지 모드 중 하나에서 메모리에 매핑 될 수 있습니다.

  • 읽기 전용 : 결과 버퍼를 수정하려는 시도는 ReadOnlyBufferException 던져지기 위해. (MapMode.READ_ONLY)

예외적으로 ByteBuffer.array 방법, 문제의 이유에 따라 던져지는 두 가지 유형의 예외가 있습니다.

던지기 :

  • ReadOnlyBufferException -이 버퍼가 배열로 백업되지만 읽기 전용 인 경우
  • UnsupportedOperationException -이 버퍼가 접근 가능한 배열로 뒷받침되지 않는 경우

문제에 대한 예외는 언급되지 않았지만, 읽기 전용 파일은 아마도 ReadOnlyBufferException 에 의해 던져 질 array 방법.

또한, 그것은 또한 언급해야합니다 ByteBuffer.array 메소드는 선택적 작동입니다.

이 버퍼를 뒷받침하는 바이트 배열을 반환합니다 (선택적 작동).

확인하기 위해 array 메소드는 a를 반환합니다 byte[] 사용될 수 있습니다 hasArray 설명서에 제안 된 방법 array 방법:

호출 hasArray 이 버퍼에 액세스 가능한 백업 배열을 갖도록하기 위해이 메소드를 호출하기 전에 방법.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top