缓冲大文件; BufferedInputStream限制为2gb;数组限制为2 ^ 31个字节

时间:2008-09-26 21:09:19

标签: java 64-bit buffer bufferedinputstream

我正在顺序处理一个大文件,我想在内存中保留一大块文件,在64位系统上可以使用16gb ram。

快速而肮脏的方法是这样做,简单地将输入流包装到缓冲的输入流中,遗憾的是,这只给了我一个2gb的缓冲区。我想在记忆中有更多的东西,我有什么替代品?

5 个答案:

答案 0 :(得分:3)

让操作系统处理缓冲文件怎么样?你有没有检查过不将整个文件复制到JVM内存中的性能影响是什么?

编辑:然后您可以使用RandomAccessFile或FileChannel有效地将文件的必要部分读入JVM内存。

答案 1 :(得分:3)

您是否考虑过java.nio中的MappedByteBuffer?这是我的头脑,但也许这就是你要找的东西。

答案 2 :(得分:1)

我怀疑无论如何一次缓冲超过2gb将是一个巨大的胜利。根据您正在进行的处理量,您可能几乎以您处理的速度读取。为了加快速度,您可以尝试使用双线程生产者 - 消费者模型(一个线程读取文件并将数据交给另一个线程进行处理)。

答案 3 :(得分:1)

操作系统将尽可能多地缓存文件,因此尝试超越缓存管理器可能不会让你受益匪浅。

从性能角度来看,通过将字节保留在JVM之外(在OS和JVM之间传输大量数据的速度相对较慢),您将获得更好的服务。您可以使用由直接内存块支持的MappedByteBuffer来实现此目标。

这是一篇相关的文章类型:article

答案 4 :(得分:0)

我认为有64位JVM支持非标准限制。

您可以尝试缓冲块。