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

用Java处理流

鄢飞鸾
2023-03-14
问题内容

在C#中,using在处理流对象时,几乎总是使用该模式。例如:

using (Stream stream = new MemoryStream())
{
    // do stuff
}

通过使用该using块,我们确保代码块执行后立即在流上调用dispose。

我知道Java没有using关键字的等效项,但是我的问题是,当使用FileOutputStreamJava中的对象时,是否需要做任何内务处理以确保将其处置?我在看这个代码示例,但我发现他们什么也不做。

我只是想知道Java在处理处置流方面的最佳实践是什么,或者它足以让垃圾收集器处理它。


问题答案:

通常,您必须执行以下操作:

InputStream stream = null;
try {
   // IO stuff - create the stream and manipulate it
} catch (IOException ex){
  // handle exception
} finally {
  try {
     stream.close();
  } catch (IOException ex){}
}

但是apache commons-
io
提供了IOUtils.closeQuietly(stream);放在该finally子句中的内容,以使它不那么难看。我认为Java
7会有一些改进。

更新:乔恩·斯基特(Jon
Skeet)提出了一个非常有用的评论,即异常的实际处理很少在类本身中发生(除非只是简单地记录它,但实际上并没有处理它)。因此,最好声明您的方法抛出该异常,或将其包装在一个自定义异常中(简单,原子操作除外)。



 类似资料:
  • 问题内容: 如何使用Java中的HttpResponse处理下载?我向特定站点发出了HttpGet请求- 该站点返回要下载的文件。如何处理此下载?InputStream似乎无法处理它(或者我使用的是错误的方法。) 问题答案: 假设您实际上在谈论HttpClient,这是一个SSCCE: 在这里工作正常。您的问题出在其他地方。

  • 问题内容: 我需要使用标题检查是否打开了一个外部窗口(另一个Java程序,但不受我正在使用的程序控制),如果打开了,则根据Java中的用户命令将其最大化或最小化(我只知道窗口的标题,什么也不知道)。Google只说我可以用来获取窗口句柄并使用该句柄对其进行操作,但是我找不到如何执行此操作。 我可以在此处找到有关如何使用JNI的参考: 在JavaSwing中,如何获取对窗口的Win32窗口句柄(hw

  • 主要内容:异常简介,异常类型很多事件并非总是按照人们自己设计意愿顺利发展的,经常出现这样那样的异常情况。例如: 你计划周末郊游,计划从家里出发→到达目的→游泳→烧烤→回家。但天有不测风云,当你准备烧烤时候突然天降大雨,只能终止郊游提前回家。“天降大雨”是一种异常情况,你的计划应该考虑到这样的情况,并且应该有处理这种异常的预案。 计算机程序的编写也需要考虑处理这些异常情况。 异常(exception)是在运行程序时产生的一种异

  • 我期望第1行捕获从第0行抛出的NullPointerException,但它没有发生。 但为什么呢?。 当定义了另一个catch块时,为什么第1行的NPE处理程序不能捕获它? 是因为“投掷”直接进入main()方法吗?

  • 问题内容: 如果我有一个布尔字段,如: 在我的代码中,我有如下语句: Java预处理程序只是摆脱了if语句和无法访问的代码? 问题答案: 大多数编译器都会删除该语句。例如: 编译完此类后,我将通过命令打印产生的指令清单: 如您所见,不!:)

  • 我遇到了一些数据,我想用许多不同的方式对它进行排序,例如按购买最多的最便宜的产品进行排序。我想一行一行地对文档进行分组,因为每行包含另一个“项目”。我附上了一张图片供参考。我更喜欢使用Java,但如果有必要,我会学习R。我是否手动将每行编码为数组?有400个项目,如果这是唯一的方法,我可以将其分成几天。 样品