Когда закрывать объект InputStream, используемый в конструкторе HSSFWorkbook? - PullRequest
0 голосов
/ 14 февраля 2020

Я работаю с HSSFWorkbook, и я хотел знать, где я должен закрыть объект InputStream, который я использовал при создании объекта HSSFWorkbook. HSSFWorkbook закрывает поток в самом конструкторе? или нам нужно закрыть его вручную? И можем ли мы закрыть его сразу после вызова конструктора? т.е. объект HSSFWorkbook использует объект InputStream только в своем конструкторе? или это может также использовать это в будущем (в этом случае мы не можем закрыть это)? спасибо.

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

1 Ответ

0 голосов
/ 14 февраля 2020

Конструктор HSSFWorkbook не указывает, будет ли InputStream закрыт или оставлен открытым, поэтому на первый взгляд не следует предполагать, что он будет закрыт. Однако, копаясь глубже, конструктор класса, используемого в самом конструкторе, с другой стороны, четко определяет его поведение.

По крайней мере в Apache POI 4.0.0 вызов new HSSFWorkbook(inputStream) приведет к вызов new POIFSFileSystem(inputStream), который в своей реализации действительно всегда закрывает поток, и документация конструктора подтверждает это.

Это может указывать на следующие ответы на ваши вопросы:

  • Закрывает ли HSSFWorkbook поток в самом конструкторе? Да, косвенно.
  • Или нам нужно закрыть его вручную? Очевидно, нет, если только они не решат больше не полагаться на POIFSFileSystem, что кажется маловероятным.
  • И можем ли мы закрыть его сразу после вызова конструктора? По-видимому, да ... но в этом нет необходимости.
  • т.е. объект HSSFWorkbook использует объект InputStream только в своем конструкторе? Видимо так.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...