gpt4 book ai didi

Java 可能的 FileChannel.map 错误

转载 作者:行者123 更新时间:2023-11-30 05:56:05 27 4
gpt4 key购买 nike

所以我正在尝试使用映射的 FileChannel 读取一个非常大的文件。

文件超过 2GB。一段代码是:

long fileSize = 0x8FFFFFFFL;
FileChannel fc = new RandomAccessFile("blah.huge", "rw").getChannel();
fc.map(FileChannel.MapMode.READ_WRITE, 0, fileSize);

这会引发错误:

Exception in thread "main" java.lang.IllegalArgumentException: Size exceeds Integer.MAX_VALUE
at sun.nio.ch.FileChannelImpl.map(FileChannelImpl.java:789)

FileChannel.map 以long 作为文件大小。那么这个错误有意义吗?为什么他们不支持更大的文件?

最佳答案

此函数使用的 native 方法确实采用长值而不报告错误。您可以使用反射来调用它们。但是,您可能会测试它们是否在您的系统上为您工作,并且以这种方式使用内存映射可能会让您感到困惑而不是有用。

最好的方法是创建一个 MappedByteBuffers 数组,例如每个大小为 1 GB,并创建一个包装器来隐藏这种丑陋。

虽然从技术上讲不是错误,但它是 BAD(按设计损坏)最初这样做的部分原因可能是 32 位 JVM 不支持这个,但我不明白为什么 64 位 JVM 仍然有这个限制。

关于Java 可能的 FileChannel.map 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7536233/

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