Java:InputStream太慢,无法读取大文件
问题内容:
我必须逐字符读取一个53 MB的文件。当我使用ifstream在C ++中完成此操作时,它以毫秒为单位完成,但是使用Java
InputStream则需要几分钟。Java这么慢是正常的还是我错过了一些东西?
另外,我需要用Java完成程序(它使用servlet,而我必须从servlet调用处理这些字符的函数)。我当时在想也许是用C或C
++编写文件处理部分,然后使用Java Native Interface将这些功能与Java程序进行接口连接。
任何人都可以给我其他提示…我非常需要更快地读取文件。我尝试使用缓冲输入,但是仍然不能提供接近C ++的性能。
编辑:我的代码跨几个文件,非常脏,因此我要介绍一下
import java.io.*;
public class tmp {
public static void main(String args[]) {
try{
InputStream file = new BufferedInputStream(new FileInputStream("1.2.fasta"));
char ch;
while(file.available()!=0) {
ch = (char)file.read();
/* Do processing */
}
System.out.println("DONE");
file.close();
}catch(Exception e){}
}
}
问题答案:
我用183 MB文件运行了此代码。它打印了“经过250毫秒”。
final InputStream in = new BufferedInputStream(new FileInputStream("file.txt"));
final long start = System.currentTimeMillis();
int cnt = 0;
final byte[] buf = new byte[1000];
while (in.read(buf) != -1) cnt++;
in.close();
System.out.println("Elapsed " + (System.currentTimeMillis() - start) + " ms");