私はここでかなり混乱しています。私はSCJPの準備をしていますが、flush()& close()メソッドの前に、BufferedWriterのメモリ割り当てをチェックするための小さな再帰的な書き込みを書きました。以下のコードブロックを参照してください、私はちょうど私のデスクトップファイルをテキストファイルに書きました。bufferedwriter close()&flush()メソッドのメモリ効果とは何ですか?
import java.io.*;
public class Myexception{
private static String lvl = "";
static BufferedWriter bw;
private static File source = new File("C:\\Users\\"+System.getProperty("user.name")+"\\Desktop\\New folder\\myTest.txt");
public static void main(String[] args) throws IOException {
Runtime rt = Runtime.getRuntime();
System.out.println("Free memory before recursive: " + rt.freeMemory());
bw = new BufferedWriter(new FileWriter(source));
checkFiles(new File("C:\\Users\\"+System.getProperty("user.name")+"\\Desktop"), 0);
System.out.println("Memory after recursive: " + rt.freeMemory());
bw.flush();
bw.close();
lvl = null;
System.out.println("Memory after clean up: " + rt.freeMemory());
}
static void checkFiles(File file, int level) throws IOException{
if(!file.exists()){
System.out.println("File doesnt exist: " + file.getName() + file.getPath());
return;
}
for(String s:file.list()){
if(new File(file.getPath() + "\\" + s).isDirectory()){
bw.newLine();
bw.write(lvl + "Directory: " + s);
lvl += " ";
checkFiles(new File(file.getPath() + "\\" + s), level+1);
}else{
bw.newLine();
bw.write(lvl + "File: " + s);
}
}
}
}
(出力は結構ですが、私は理解していませんでし何を、フラッシュよりも前に、空きメモリ)&近い()(フラッシュよりも後と同じである)&近い()私の出力を参照してください。
Free memory before recursive: 126150232
Memory after recursive: 104461304
Memory after clean up: 104461304
私は既存のトピックをチェックしましたが、正確な説明を見つけることができませんでした。私はbw.close()の後に空きメモリが増えることを期待していました。
は、「メモリをクリーンアップ」とは何の関係もありません、彼らはBufferedStream
内のデータは、例えばディスクやネットワークソケット、ストリームが指しているものは何でもにフラッシュされていることを確認してくださいあなたに
もっと大きな文章を書くようにしてください。 1つのチャンク内のファイルに書き込めないもの – LazyCubicleMonkey