我正在用 Java 做内存映射 IO。FileChannel 类允许您将 ByteBuffer 映射到文件的特定部分。我正在使用只读打开的文件来执行此操作。
我遇到的问题是,当我尝试在生成的 ByteBuffer 上调用 .array() 方法时出现异常。也许那是因为 .array() 返回一个 byte[] 数组,而我真的想要一个最终的字节数组?
有没有办法解决?
我正在用 Java 做内存映射 IO。FileChannel 类允许您将 ByteBuffer 映射到文件的特定部分。我正在使用只读打开的文件来执行此操作。
我遇到的问题是,当我尝试在生成的 ByteBuffer 上调用 .array() 方法时出现异常。也许那是因为 .array() 返回一个 byte[] 数组,而我真的想要一个最终的字节数组?
有没有办法解决?
我将假设这是关于FileChannel.map
可以将文件映射到内存的方法,该内存可由MappedByteBuffer
.
在该FileChannel.map
方法的文档中,如果文件被映射为只读,则任何修改缓冲区的尝试都将导致ReadOnlyBufferException
:
文件的一个区域可以通过以下三种模式之一映射到内存中:
- 只读:任何修改结果缓冲区的尝试都将导致 a
ReadOnlyBufferException
被抛出。(MapMode.READ_ONLY
)
就ByteBuffer.array
方法抛出的异常而言,根据问题的原因,有两种类型的异常抛出:
抛出:
ReadOnlyBufferException
- 如果此缓冲区由数组支持但为只读UnsupportedOperationException
- 如果此缓冲区没有可访问数组的支持
尽管问题中没有提到抛出的异常,但可能是只读文件导致该方法ReadOnlyBufferException
抛出异常array
。
另外,还应该提到该ByteBuffer.array
方法是可选操作:
返回支持此缓冲区的字节数组(可选操作)。
为了确保该array
方法将返回一个byte[]
可以使用的hasArray
方法,请按照该方法的文档中的建议调用该array
方法:
在调用
hasArray
此方法之前调用该方法,以确保此缓冲区具有可访问的后备数组。