Java:InputStream太慢,无法读取大文件 [英] Java: InputStream too slow to read huge files

查看:1597
本文介绍了Java:InputStream太慢,无法读取大文件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我必须逐字符读取一个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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆