您的位置 首页 java

「每日分享」内存文件映射方式读取超大文件踩坑题解析

使用内存文件映射 MappedByteBuffer 读超大文件会有什么问题吗?

这种方式存在一个致命问题就是依然没法读取超大文件(大于 Integer.MAX_VALUE),因为 FileChannel 的 map 方法中 size 参数会有大小限制,源码中发现该参数值大于 Integer.MAX_VALUE 时会直接抛出 IllegalArgumentException(“Size exceeds Integer.MAX_VALUE”) 异常,所以对于特别大的文件其依然不适合。

本质上是由于 java .nio.MappedByteBuffer 直接继承自 java.nio.ByteBuffer ,而ByteBuffer 的索引是 int 类型的,所以 MappedByteBuffer 也只能最大索引到 Integer.MAX_VALUE 的位置,所以 FileChannel 的 map 方法会做参数合法性检查。

我们可以通过多个内存文件映射来解决这个问题,具体如下。

如上便是一种解决方案,其实质依然是分割。

想要源码可以阅读原文:#wechat_redirect

文章来源:智云一二三科技

文章标题:「每日分享」内存文件映射方式读取超大文件踩坑题解析

文章地址:https://www.zhihuclub.com/178590.shtml

关于作者: 智云科技

热门文章

网站地图