读取和处理25GB的大文本文件

use*_*292 10 java file-io file large-files

我必须阅读25 GB的大文本文件,并且需要在15-20分钟内处理此文件.此文件将具有多个页眉和页脚部分.

我尝试使用CSplit根据标题分割这个文件,但它需要大约24到25分钟才能根据标题将其拆分为多个文件,这根本不可接受.

我试过连续读取和写入使用BufferReaderBufferWiter沿FileReaderFileWriter.这需要超过27分钟.再说一遍,这是不可接受的.

我尝试了另一种方法,比如获取每个头的起始索引,然后运行多个线程,通过使用从特定位置读取文件RandomAccessFile.但是没有运气.

我怎样才能达到我的要求?

可能重复:

用Java读取大文件

col*_*son 9

尝试使用较大的缓冲区读取大小(例如,20MB而不是2MB)来更快地处理数据.由于速度慢和字符转换,也不要使用BufferedReader.

之前已经提出过这个问题:用Java读取大文件


Pet*_*rey 6

您需要确保IO足够快,而无需进行处理,因为我怀疑处理,而不是IO会降低您的速度.您应该可以从硬盘驱动器获得80 MB/s的速度,从SSD驱动器获得最高400 MB/s的速度.这意味着您可以在一秒钟内阅读整个内容.

尝试以下,这不是最快,但最简单.

long start = System.nanoTime();
byte[] bytes = new byte[32*1024];
FileInputStream fis = new FileInputStream(fileName);
int len;
while((len = fis.read(bytes)) > 0);
long time = System.nanoTime() - start;
System.out.printf("Took %.3f seconds%n", time/1e9);
Run Code Online (Sandbox Code Playgroud)

除非您发现至少达到50 MB/s,否则会出现硬件问题.