在Java中将BufferedWriter和PrintWriter交织在一起安全吗?请考虑以下示例:
private void writeToFile(File file, String text, Throwable throwable) throws Exception { // I use the "throws Exception" here for simplicity of the example
// Write text
BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(file));
bufferedWriter.write(text);
bufferedWriter.newLine();
bufferedWriter.flush();
// Write StackTrace
PrintWriter printWriter = new PrintWriter(bufferedWriter);
throwable.printStackTrace(printWriter);
printWriter.close();
}我知道我也可以用PrintWriter来写课文。但我的问题是:
PrintWriter和BufferedWriter安全吗?bufferedWriter.flush()也是安全的吗?BufferedWriter之后再次使用PrintWriter是否也是安全的?注意,类似的问题这里假设只有PrintWriter被访问,因此没有回答我的问题。
发布于 2018-09-05 09:03:22
这样使用PrintWriter和BufferedWriter安全吗?
正如您在文档中所看到的
通常,Writer将其输出立即发送到基础字符或字节流。除非需要提示输出,否则最好将BufferedWriter封装在任何写操作可能代价高昂的Writer (例如FileWriters和OutputStreamWriters )周围。
例如:
PrintWriter out
= new PrintWriter(new BufferedWriter(new FileWriter("foo.out")));如果是安全的,如果没有bufferedWriter.flush(),它也是安全的吗?
是的,它是安全的。刷新()在您调用流时刷新它。根据经验,IMHO没有自动刷新(并将更大的数量写入流),您必须在关闭流之前调用它。
同样,从文件中:
公共PrintWriter(OutputStream out) 从现有的PrintWriter创建一个没有自动行刷新的新OutputStream。这个方便的构造函数创建了必要的中间OutputStreamWriter,它将使用默认字符编码将字符转换为字节。
因此,如果您使用这个构造函数,您应该在关闭流之前调用PrintWriter(),如果您使用另一个公共autoflush (Writer,boolean )并为自动刷新定义true,我认为这个调用是不必要的。
如果是安全的,那么在我使用PrintWriter?之后,再次使用PrintWriter是否也是安全的?
如果您已经为附件定义了FileWriter,那么这是安全的。现在,您将在函数的每个调用中覆盖您的文件。因此,我将使用这个构造函数:FileWriter(文件文件,布尔追加),并为追加指定true。
有什么不安全的:您应该使用具有自动刷新的try-语句,或者尝试捕获--最后并关闭(或者可能刷新)您的流,以便正确地释放资源。
https://stackoverflow.com/questions/52180853
复制相似问题