quothがJavadocを:
ストリームにはBaseStream.close()メソッドがあり、AutoCloseableを実装していますが、ほとんどすべてのストリームインスタンスを実際に使用後に閉じる必要はありません。通常、ソースがIOチャネル(Files.lines(Path、Charset)によって返されるものなど)であるストリームのみを閉じる必要があります。ほとんどのストリームは、特別なリソース管理を必要としないコレクション、配列、または生成関数によって支援されます。(ストリームを閉じる必要がある場合、try-with-resourcesステートメントでリソースとして宣言できます。)
「ほぼすべて」と「一般に」はあいまいです-ライブラリを作成していて、そのストリームのユーザーからストリームのソースを抽象化している場合は、とにかく自分に質問する必要があります-「閉じる必要がありますこの?" 端末操作はを呼び出さないため、IOがサポートするストリームを閉じる必要がありますclose
。そのため、事実上、ストリームの送信元を常に覚えておくか、常にストリームする必要がありますclose
。
核となる選択肢は、メソッドからストリームを返さないか、ストリームパラメーターを受け入れないことです。これは、JDKチームの一部の人々によって反響されてきた感情です。Streamsの実用的な有用性を考えると、過度に制限されていることがわかります。
Streamsを閉じる際のベストプラクティスは何ですか?よく似たコミュニティの質問に通常積極的に参加しているJDKの人々から、これに対する答えをオンラインで探しましたが、関連するものは見つかりませんでした。