Я собираюсь предположить, что речь идет о методе FileChannel.map
, который может сопоставить файл с памятью, к которой можно получить доступ MappedByteBuffer
.
В документации к методу FileChannel.map
, если файл отображается только для чтения, любая попытка изменить буфер приведет к ReadOnlyBufferException
:
Область файла может отображаться в
память в одном из трех режимов:
- Только для чтения: любая попытка изменить
результирующий буфер вызовет
ReadOnlyBufferException
быть брошенным.
(MapMode.READ_ONLY
) * * тысяча двадцать-одна
С точки зрения исключений, генерируемых методом ByteBuffer.array
, существует два типа исключений, которые генерируются в зависимости от причины проблемы:
Выдает:
ReadOnlyBufferException
- Если этот буфер поддерживается массивом, но доступен только для чтения
UnsupportedOperationException
- Если этот буфер не поддерживается доступным массивом
Хотя выбрасываемое исключение не упоминается в этом вопросе, возможно, файл, доступный только для чтения, вызывает выброс ReadOnlyBufferException
методом array
.
Также следует отметить, что метод ByteBuffer.array
является дополнительной операцией:
Возвращает байтовый массив, который поддерживает это
буфер (необязательная операция).
Чтобы быть уверенным в том, что метод array
вернет byte[]
, который можно использовать, вызовите метод hasArray
, как предлагается в документации для метода array
:
Перед вызовом метода hasArray
вызывая этот метод для того, чтобы
убедитесь, что этот буфер имеет
доступный резервный массив.