私がファイルから読み取ることを目にするすべてのJava実装では、ほとんどの場合、ファイルリーダーが1行ずつ読み取るために使用されます。私の考えでは、これは回線ごとにシステムコールを必要とするため、非常に非効率的です。
代わりに私がやっていたのは、入力ストリームを使用してバイトを直接取得することです。私の実験では、これは非常に高速です。私のテストは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
では、なぜ人々はストリームの代わりにリーダーを使用するのでしょうか?
テキストファイルを受け取り、すべてのテキストを含む文字列を返すメソッドがある場合、ストリームを使用してそれを行う方が必ずしも良いですか?