【发布时间】:2012-05-06 20:09:37
【问题描述】:
我必须一个字符一个字符地读取一个 53 MB 的文件。当我使用 ifstream 在 C++ 中执行此操作时,它会在几毫秒内完成,但使用 Java InputStream 则需要几分钟。 Java 这么慢是正常的还是我错过了什么?
另外,我需要用 Java 完成程序(它使用 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){}
}
}
【问题讨论】:
-
向我们展示您的代码。如果不了解您的工作方式,我们无法猜测您的问题。
-
你在使用
BufferedInputStream吗?你应该在BufferedReader上使用它。您的访问模式是否可以使用java.nio对文件的部分进行内存映射?具体来说,当您说“charbychar”时,您是否足够了解编码以处理chars 其字节序列可能分布在多个内存映射段中? -
没有办法只读取那些 53M 字符而不做任何其他事情可能需要超过几秒钟,缓冲或不缓冲。肯定还有别的东西。
-
逐字阅读可能是您的问题。
-
您错误地使用了
file.available()。试试这个,while((ch = (char)file.read()) >= 0)并删除ch = (char)file.read();
标签: java inputstream large-files java-native-interface