Java:InputStream太慢,无法读取大文件 [英] Java: InputStream too slow to read huge files
问题描述
我必须逐字符读取一个53 MB的文件.当我使用ifstream在C ++中完成此操作时,它以毫秒为单位完成,但是使用Java InputStream则需要几分钟. Java这么慢是正常的还是我错过了什么?
I have to read a 53 MB file character by character. When I do it in C++ using ifstream, it is completed in milliseconds but using Java InputStream it takes several minutes. Is it normal for Java to be this slow or am I missing something?
此外,我需要用Java完成程序(它使用servlet,而我必须从servlet调用处理这些字符的函数).我在想也许是用C或C ++编写文件处理部分,然后使用Java Native Interface将这些功能与Java程序进行接口连接.
Also, I need to complete the program in Java (it uses servlets from which I have to call the functions which process these characters). I was thinking maybe writing the file processing part in C or C++ and then using Java Native Interface to interface these functions with my Java programs... How is this idea?
任何人都可以给我其他提示...我严重需要更快地阅读文件.我尝试使用缓冲输入,但仍然无法提供接近C ++的性能.
Can anyone give me any other tip... I seriously need to read the file faster. I tried using buffered input, but still it is not giving performance even close to C++.
我的代码跨越了多个文件,非常脏,因此我要介绍一下提要
Edited: My code spans several files and it is very dirty so I am giving the synopsis
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毫秒".
I ran this code with a 183 MB file. It printed "Elapsed 250 ms".
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");
这篇关于Java:InputStream太慢,无法读取大文件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!