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");