【发布时间】:2011-11-09 03:37:30
【问题描述】:
我正在从一个目录(包含数千个文件)读取 XML 文件,处理内容并为每个输入文件编写一个输出文件。有没有办法“重新指向”现有的 BufferedWriter 而不是为每个文件创建一个新实例?
...
Scanner scanner;
BufferedWriter writer;
File outfile;
for (File f: directory.ListFiles[]){
scanner = new Scanner(f);
outfile = ...;
// processing input
writer = new BufferedWriter(new FileWriter(new File(outfile)));
// write the content
writer.flush();
writer.close();
}
...
必须创建 Scanner 和 BufferedWriter 的数千次迭代似乎是一种浪费。
【问题讨论】:
-
JVM 可以检测它是否可以重用创建的写入器对象...
-
对象创建非常便宜,因此无需担心创建对象
-
BufferedWriter是一个非常轻量级的类。比它包装的文件轻得多。 -
更大的问题是您没有指定用于写入文件的编码。你知道你的默认编码是什么吗?您能保证您文件的每个使用者都具有相同的编码吗?如果这两个问题的答案是“否”,那么您应该使用带有显式编码的
OutputStreamWriter。 -
@a_horse_with_no_name,我正在分析我的 android 应用程序的性能,而 BufferedWriter 分配(或者更确切地说,在其构造函数中完成的 char[] 分配)是目前昂贵的 GC_FOR_ALLOC 传递的最大贡献者,而且非常破坏了我的用户界面。分配速度挺快的,但是对系统的影响很大。
标签: java reusability bufferedwriter