System.out关闭了吗?我可以重新打开吗?

我当时正在帮助一个朋友编写一些Java代码,而他们对Java并不了解很多。因此,我给他写了一些辅助函数,以轻松地完成在他眼中有些古怪的事情。其中一个函数是将String写入的函数OutputStream。看一看:

public void write(String txt, OutputStream out) {

PrintWriter printer = new PrintWriter(out);

printer.print(txt);

printer.close();

}

现在,您可以轻松地以各种方式使用它,在任何地方书写。例如,您可以这样做:

(new StreamHelper()).write("Hello Test", System.out);

这样做后,我发现之后System.out.println()不再向外壳写入任何内容。所以我认为也许printer.close()也会自动关闭System.out,我想知道如何重新激活它,以便在该功能再次完成后可以使用它。

我的假设正确吗?(如何在不询问的情况下找到答案?)

System.out调用write()函数后如何继续使用?

有没有更好的方法来编写这样的辅助函数?

回答:

OutputStream的关闭总合同:

public void close()throws

IOException关闭此输出流并释放与此流关联的所有系统资源。关闭的总协定是关闭输出流。关闭的流无法执行输出操作, 。

PrintStream

public void close()关闭流。这是通过刷新流然后 。

我可以给您的唯一建议是,您不应编写非对称代码,即,不要将关闭代码创建的资源委托给其他地方。

即使就您而言,关闭包装流似乎是明智的,事实是您不应该因为关闭正在其他位置打开的流而已。

简而言之:

public void write(String txt, OutputStream out) {

PrintWriter printer = new PrintWriter(out);

printer.print(txt);

printer.flush();

//it is very unpolite to close someone else's streams!

//printer.close();

}

哦,顺便说一句,您可能想将函数名称更改为print,而不是write

以上是 System.out关闭了吗?我可以重新打开吗? 的全部内容, 来源链接: utcz.com/qa/410023.html

回到顶部