use*_*292 10 java file-io file large-files
我必须阅读25 GB的大文本文件,并且需要在15-20分钟内处理此文件.此文件将具有多个页眉和页脚部分.
我尝试使用CSplit根据标题分割这个文件,但它需要大约24到25分钟才能根据标题将其拆分为多个文件,这根本不可接受.
我试过连续读取和写入使用BufferReader和BufferWiter沿FileReader和FileWriter.这需要超过27分钟.再说一遍,这是不可接受的.
我尝试了另一种方法,比如获取每个头的起始索引,然后运行多个线程,通过使用从特定位置读取文件RandomAccessFile.但是没有运气.
我怎样才能达到我的要求?
可能重复:
您需要确保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,否则会出现硬件问题.