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