gpt4 book ai didi

java - 为什么 .array() 对从映射的 FileChannels 返回的 ByteBuffers 不起作用?

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:27:34 26 4
gpt4 key购买 nike

我正在用 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

虽然问题中没有提到抛出的异常,但也许是只读文件导致了 ReadOnlyBufferExceptionarray 方法抛出。

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

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

要确保 array 方法将返回一个可以使用的 byte[],请按照建议的方式调用 hasArray 方法array 方法的文档:

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

关于java - 为什么 .array() 对从映射的 FileChannels 返回的 ByteBuffers 不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1054020/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com