Java中读取文本文件的最快方法是什么?

Java中读取文本文件的最快方法是什么?,java,file-io,Java,File Io,我目前使用: BufferedReader input = new BufferedReader(new FileReader("filename")); 有没有更快的方法?查看java.nio.channels.FileChannel 您是否对其他选项进行了基准测试?我认为,在某些情况下,不使用BufferedReader可能会更快,比如非常小的文件。我建议您至少做一些小的基准测试,并找到最快的、适用于典型用例的实现。虽然您得到的不一定是绝对最快的,但很简单。事实上,我不会使用那种形式——我

我目前使用:

BufferedReader input = new BufferedReader(new FileReader("filename"));

有没有更快的方法?

查看java.nio.channels.FileChannel

您是否对其他选项进行了基准测试?我认为,在某些情况下,不使用BufferedReader可能会更快,比如非常小的文件。我建议您至少做一些小的基准测试,并找到最快的、适用于典型用例的实现。

虽然您得到的不一定是绝对最快的,但很简单。事实上,我不会使用那种形式——我会使用一些允许我指定字符集的东西,例如

// Why is there no method to give this guaranteed charset
// without "risk" of exceptions? Grr.
Charset utf8 = Charset.forName("UTF-8");     
BufferedReader input = new BufferedReader(
                           new InputStreamReader(
                               new FileInputStream("filename"),
                               utf8));

您可能可以使用NIO使其运行得更快,但在看到实际问题之前,我不会这么做。如果您发现了问题,但正在对数据执行其他操作,请首先确保它们不是问题:编写一个程序,只读取文件的文本。不要忘了在运行之间清除文件系统缓存,这取决于您想要读取的内容。完整的文件,或者从一个特定的位置,您需要能够通过它进行搜索,还是希望一次读取完整的文本

如果它是/fast/you-want,请将字符数据保存为编码形式(我不是指UTF-16)。虽然磁盘I/O通常很慢(除非缓存),但解码和保留两次数据也可能是一个问题。虽然加载速度最快的可能是通过
java.nio.channels.FileChannel.map(MapMode.READ_ONLY,…)
,但这在解除分配方面存在严重问题


通常的警告是适用的。

你究竟如何实例化InputStream?为什么不干脆做
新扫描仪(新文件(…)
?@SimonKuang:我不知道
扫描仪
有多少缓冲,我个人讨厌
扫描仪
API。如果你只想读几行文字,那就太过分了——而我给你的每一行代码都是为了做一件事。@SimonKuang:有一种更简单的类型,它可以做需要做的事情(带缓冲的阅读文字),而不需要增加厨房水槽的所有其他职责(解析数字等)。当我想要一个可以读取文本的类型,而这正是我所需要做的,我会查看
阅读器
类,而不是
扫描仪
。此外,我还可以将
读取器
传递给对阅读文本感兴趣的任何其他代码。例如,我可以从
读取器
加载
属性
数据,但不能从
扫描仪
加载数据。我可以使用
阅读器
解析XML,但不能使用
扫描器
@SimonKuang:我还强烈建议您在构建
扫描器
读取文件时传入编码。不幸的是,
扫描仪
不允许您传入
字符集
,只有名称。。。而
InputStreamReader
允许您指定
Charset
,因此我可以使用Java 7中的
StandardCharsets.UTF_8
,例如……这是读取文件最明显、最简单的方法。但你真的认为它能在速度方面与之竞争吗?为什么你需要这么多的速度?
File file = new File("querySourceFileName");
Scanner s = new Scanner(file);
while (s.hasNext()) {
    System.out.println(s.nextLine());
}