次の静的な方法を取ります。
public static String fileToString(String filename) throws Exception {
FileInputStream fis = new FileInputStream(filename);
byte[] buffer = new byte[8192];
StringBuffer sb = new StringBuffer();
int bytesRead; // unused? weird compiler messages...
while((bytesRead = fis.read(buffer)) != -1) { // InputStream.read() returns -1 at EOF
sb.append(new String(buffer));
}
return new String(sb);
}
ご覧のとおり、すべて問題なく表示され、小さなテキストファイルに最適です。しかし、数千行の大きなファイルに到達すると、テキストの繰り返しで問題が発生します。byte[] buffer
私の直感からすると、いわば「汚れた」と思いました。そこで、メソッドに次の行を追加しました。
buffer = new byte[8192];
これで、次のようになります。
public static String fileToString(String filename) throws Exception {
FileInputStream fis = new FileInputStream(filename);
byte[] buffer = new byte[8192];
StringBuffer sb = new StringBuffer();
int bytesRead; // unused? weird compiler messages...
while((bytesRead = fis.read(buffer)) != -1) { // InputStream.read() returns -1 at EOF
sb.append(new String(buffer));
buffer = new byte[8192]; // added new line here
}
return new String(sb);
}
そして、静的メソッドが返す文字列の最後で、多くのヌル文字を取得するという事実を除いて、それは完璧です(バッファサイズによって異なります)。何が起きてる?