首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >交错BufferedWriter和PrintWriter

交错BufferedWriter和PrintWriter
EN

Stack Overflow用户
提问于 2018-09-05 08:44:15
回答 1查看 118关注 0票数 2

在Java中将BufferedWriterPrintWriter交织在一起安全吗?请考虑以下示例:

代码语言:javascript
复制
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来写课文。但我的问题是:

  • 用这种方式使用PrintWriterBufferedWriter安全吗?
  • 如果它是安全的,没有bufferedWriter.flush()也是安全的吗?
  • 如果它是安全的,那么在我使用BufferedWriter之后再次使用PrintWriter是否也是安全的?

注意,类似的问题这里假设只有PrintWriter被访问,因此没有回答我的问题。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-09-05 09:03:22

这样使用PrintWriter和BufferedWriter安全吗?

正如您在文档中所看到的

通常,Writer将其输出立即发送到基础字符或字节流。除非需要提示输出,否则最好将BufferedWriter封装在任何写操作可能代价高昂的Writer (例如FileWriters和OutputStreamWriters )周围。

例如:

代码语言:javascript
复制
 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-语句,或者尝试捕获--最后并关闭(或者可能刷新)您的流,以便正确地释放资源。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52180853

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档