java – 如何使用.array()对map’ed FileChannels返回的ByteBuffers不起作用?

我正在用Java做内存映射IO. FileChannel类允许您将ByteBuffer映射到文件的特定部分.我这样做只有一个打开的文件.

我遇到的问题是,当我尝试在生成的ByteBuffer上调用.array()方法时,我遇到异常.也许这是因为.array()返回一个byte []数组,我真的想要一个最终的字节数组?

有没有办法解决?

最佳答案
我将假设这是关于FileChannel.map方法,它可以将文件映射到内存,可以通过MappedByteBuffer访问.

在FileChannel.map方法的文档中,如果文件被映射为只读,则任何修改缓冲区的尝试都将导致ReadOnlyBufferException

A region of a file may be mapped into
memory in one of three modes:

  • Read-only: Any attempt to modify
    the resulting buffer will cause a
    ReadOnlyBufferException to be thrown.
    (MapMode.READ_ONLY)

ByteBuffer.array方法抛出的异常而言,根据问题的原因抛出两种类型的异常:

Throws:

  • ReadOnlyBufferException – If this buffer is backed by an array but is read-only
  • UnsupportedOperationException – If this buffer is not backed by an accessible array

虽然在问题中没有提到抛出的异常,但是只读文件可能导致ReadOnlyBufferException被数组方法抛出.

另外,还应该提到ByteBuffer.array方法是可选操作:

Returns the byte array that backs this
buffer (optional operation).

为了确保数组方法将返回可以使用的byte [],请按照数组方法的文档中的建议调用hasArray方法:

Invoke the 07006 method before
invoking this method in order to
ensure that this buffer has an
accessible backing array.

转载注明原文:java – 如何使用.array()对map’ed FileChannels返回的ByteBuffers不起作用? - 代码日志