当前位置: 首页 > 面试题库 >

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

花高爽
2023-03-14
问题内容

我当时正在帮助一个朋友编写一些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



 类似资料:
  • 我是新手。我对它很着迷,但我不确定它是否适合我的用例。 我想有一个记录器,我可以停止和启动。当它停止时,我想从文件系统中删除日志文件。重新启动日志记录时,应重新创建文件。 logback能做到这一点吗?当日志暂停时,我应该避免在我的类中调用记录器,还是回写可以处理这个问题? 我使用slf4j。记录器当前。在手册中,我看到Appender对象实现了LifeCycle接口,这意味着它们实现了start

  • 问题内容: 我有一个多线程控制台应用程序,它从两个不同的来源获取输入。一种是用户在控制台中键入内容,另一种是网络。我使用BufferedReader.readline()从用户那里获取输入,并且该输入被阻止,这很好,除非在等待时收到网络输入。在那种情况下,我需要通过取消readline()来解除对用户线程的阻塞。 我想最好的取消方法是关闭System.in并使readline()抛出异常。在那之后

  • 问题内容: 我想完全消除HttpSession-我可以在web.xml中这样做吗?我敢肯定,有一些特定于容器的方法可以做到这一点(当我进行Google搜索时,这会挤满搜索结果)。 PS这是个坏主意吗?在我真正需要它们之前,我宁愿完全禁用它们。 问题答案: 我想彻底消除HttpSession 您不能完全禁用它。您所需要做的就是不要在Web应用程序的代码中任何地方)或任何地方获取它的句柄,并确保您的J

  • 问题内容: 我想完全消除HttpSession- 我可以在web.xml中这样做吗?我敢肯定,有一些特定于容器的方法可以做到这一点(当我进行Google搜索时,搜索结果会很拥挤)。 PS这是个坏主意吗?在我真正需要它们之前,我宁愿完全禁用它们。 问题答案: 我想彻底消除HttpSession 您不能完全禁用它。您需要做的就是 不要 在Web应用程序的代码中任何地方或任何地方都得到它的句柄,并确保您

  • 问题内容: 我可以轻松进行“作业”,但是我发现输入流的关闭存在一些问题。简单地说,我必须使用Java创建一个联系人“列表”应用程序,才能以正确的方式使用多态。所以我有一个Contact类和一个Private类(contact)。在这两个类中,都有一个Modify方法来更改变量的值。 这是不会产生问题的Contact方法 相反,这是Private中方法的替代。首先,我创建一个Private对象,然后

  • 我需要编辑aar文件以满足我的需要。我需要编辑aar文件以满足我的需要。我需要编辑aar文件以满足我的需要。我需要编辑aar文件以满足我的需要。我需要编辑aar文件以满足我的需要。我需要编辑aar文件以满足我的需要。我需要编辑aar文件以满足我的需要。我需要编辑aar文件以满足我的需要。我需要编辑aar文件以满足我的需要。我需要编辑aar文件以满足我的需要。我需要编辑aar文件以满足我的需要。我需