我只读了一个大小为167MB且行号为1884000的文件.我使用的方法是BufferedReader,以获得读取它的效果.
我注意到,随着当前行号的增加,读取文件的过程越来越慢(在这种情况下,我花了3小时30分钟完成它).
我知道使用nio可能会加快这个过程,但我想要读取该文件.
我的代码如下;有人能给我一些建议吗?非常感谢!
String htmlContentPath = html.getAbsolutePath();
BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(htmlContentPath)));
String line = null;
int cnt = 0;
while((line = reader.readLine()) != null) {
this.proc(line);
if((cnt++ % 2000) == 0) {
logger.info("current line number:\t"+cnt);
}
}
最佳答案 你应该能够在这里找到答案:
要获得最佳的Java读取性能,需要记住以下四点:
>通过一次读取一个数组来最小化I / O操作,而不是一次读取一个字节.一个8K字节的阵列是一个很好的大小.
>通过一次获取数据数组来最小化方法调用,而不是一次获取一个字节.使用数组索引来获取数组中的字节数.
>如果您不需要线程安全,请最小化线程同步锁.对线程安全类进行较少的方法调用,或者使用非线程安全的类,如FileChannel和MappedByteBuffer.
>最大限度地减少JVM / OS,内部缓冲区和应用程序阵列之间的数据复制.将FileChannel与内存映射一起使用,或使用直接或包装的数组ByteBuffer.