java 读取大文件时怎么样才能加快速度?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java 读取大文件时怎么样才能加快速度?相关的知识,希望对你有一定的参考价值。

我在程序中读取文件信息,采用的是按行读取,但是当文件占用空间不断增大时(最大限制不会超过100M),文件的读取速度特别慢,请问要怎样优化才能加快大文件的读取速度呢?谢谢!

可以试试RandomAccessFile 随机输入流类

下面是API文档上摘下来的:

java.io
类 RandomAccessFile
java.lang.Object
java.io.RandomAccessFile
所有已实现的接口:
Closeable, DataInput, DataOutput

--------------------------------------------------------------------------------

public class RandomAccessFileextends Objectimplements DataOutput, DataInput, Closeable此类的实例支持对随机存取文件的读取和写入。随机存取文件的行为类似存储在文件系统中的一个大型字节数组。存在指向该隐含数组的光标或索引,称为文件指针;输入操作从文件指针开始读取字节,并随着对字节的读取而前移此文件指针。如果随机存取文件以读取/写入模式创建,则输出操作也可用;输出操作从文件指针开始写入字节,并随着对字节的写入而前移此文件指针。写入隐含数组的当前末尾之后的输出操作导致该数组扩展。该文件指针可以通过 getFilePointer 方法读取,并通过 seek 方法设置。

通常,如果此类中的所有读取例程在读取所需数量的字节之前已到达文件末尾,则抛出 EOFException(是一种 IOException)。如果由于某些原因无法读取任何字节,而不是在读取所需数量的字节之前已到达文件末尾,则抛出 IOException,而不是 EOFException。需要特别指出的是,如果流已被关闭,则可能抛出 IOException。

从以下版本开始:
JDK1.0
参考技术A 加大缓冲区,看看效果,
你是用什么流类进行的?

如何加快Java中zip文件中条目的解析速度

我有一个Web服务即时解析其内部文件结构的zip文件(文件名,目录等...)并将结果作为json发回。它工作正常,只是zip文件包含一些非常大的文件,并且它可能需要几十秒才能得到答案,即使zip文件中只有少数文件。我怀疑解压缩算法必须解析整个文件以获取不同的zip条目。我正在使用标准的java zip库。这是一些基本代码:

        ZipInputStream zis = new ZipInputStream(new FileInputStream(new File(myFilePath)));
        ZipEntry zipEntry = zis.getNextEntry();
        while(zipEntry != null){
            // code to generate the json file tree ---
            // --- end of code
            zipEntry = zis.getNextEntry();
        }

我没有阅读文件的内容或任何东西,只是遍历条目。事实上,我可以像上面那样空运行它,它仍然会花费很多时间(和CPU)。

有没有办法加快这个过程?可能更好的图书馆?

谢谢!

答案

根据评论,更好的方法是使用ZipFile而不是ZipInputStream

   final ZipFile file = new ZipFile(filePath);
       final Enumeration<? extends ZipEntry> entries = file.entries();
       while ( entries.hasMoreElements() ) {
           final ZipEntry zipEntry = entries.nextElement();
           // code to generate the json file tree ---
           // --- end of code
       }
   }

所有的积分应该去Wasim Wani对以下问题的答案Reading zip file efficiently in Java那是我找到代码的地方。

以上是关于java 读取大文件时怎么样才能加快速度?的主要内容,如果未能解决你的问题,请参考以下文章

如何加快Java中zip文件中条目的解析速度

JAVA多线程到底能不能加快程序运行速度?

加快读取多个泡菜文件

java 读取 500M文件中间的内容

如何才能拿R读取Excel文件

java怎么读取Zip和RAR里面的文件啊?