我看到的每个Java实现中,读取文件几乎总是使用FileReader逐行读取。 我认为这会非常低效,因为它需要每行执行一次系统调用。
相反,我使用输入流直接获取字节。 在我的实验中,这样做明显更快。 我的测试是一个1MB的文件。
//Stream method
try {
Long startTime = new Date().getTime();
InputStream is = new FileInputStream("test");
byte[] b = new byte[is.available()];
is.read(b);
String text = new String(b);
//System.out.println(text);
Long endTime = new Date().getTime();
System.out.println("Text length: " + text.length() + ", Total time: " + (endTime - startTime));
}
catch (Exception e) {
e.printStackTrace();
}
//Reader method
try {
Long startTime = new Date().getTime();
BufferedReader br = new BufferedReader(new FileReader("test"));
String line = null;
StringBuilder sb = new StringBuilder();
while ((line = br.readLine()) != null) {
sb.append(line);
sb.append("\n");
}
String text = sb.toString();
Long endTime = new Date().getTime();
System.out.println("Text length: " + text.length() + ", Total time: " + (endTime - startTime));
}
catch (Exception e) {
e.printStackTrace();
}
这将得到一个结果:
Text length: 1054631, Total time: 9
Text length: 1034099, Total time: 22
那么,为什么人们使用读取器而不是流?
如果我有一个接受文本文件并返回包含所有文本的字符串的方法,那么使用流一定更好吗?