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