0

我正在使用HSSFWorkbook,我想知道我应该在哪里关闭InputStream我在构造对象时使用的HSSFWorkbook对象。HSSFWorkbook 是否在其构造函数本身中关闭流?还是我们需要手动关闭它?我们可以在构造函数调用之后关闭它吗?即,对象是否仅在其构造函数中HSSFWorkbook使用该对象?InputStream或者它将来也可以使用它(在这种情况下我们不能关闭它)?谢谢你。

public HSSFWorkbook loadSheet(File file) throws FileNotFoundException, IOException {
    return new HSSFWorkbook(new FileInputStream(file)); 
}
4

1 回答 1

0

的构造函数HSSFWorkbook没有说明InputStream是关闭还是打开,所以乍一看你不应该假设它会被关闭。然而,深入挖掘,另一方面,在构造函数本身中使用的类的构造函数确实清楚地说明了它的行为。

至少在 Apache POI 4.0.0 中,调用new HSSFWorkbook(inputStream)将导致调用new POIFSFileSystem(inputStream),在其实现中,确实似乎总是关闭流,并且构造函数文档确认了它。

这似乎指向您的问题的以下答案:

  • 是否HSSFWorkbook在其构造函数本身中关闭流?是的,间接的。
  • 还是我们需要手动关闭它?显然不是,除非他们决定不再依赖POIFSFileSystem,这似乎不太可能。
  • 我们可以在构造函数调用之后关闭它吗?显然,是的……但没有必要。
  • 即对象是否仅在其构造函数中HSSFWorkbook使用该对象?InputStream显然是这样。
于 2020-02-14T11:19:27.500 回答