Java 8 Stream.iterator()
は終了時にストリームを自動クローズしますか? 私はこのようなものはありませ...リソースを自動クローズするJava 8ストリーム.iterator()?
を考える:
class Provider implements Serializable {
Iterator<String> iterator() {
Stream<String> stream = new BufferedReader(...).lines();
return stream.iterator();
}
}
このイテレータは、イテレータがファイル読み取りリソースに基づいて把握していない他のいくつかのクラスによって使用されています。つまり、ファイルが大きすぎてメモリに格納できないため、ファイルをストリームする必要があります。しかし、イテレータがそれ以上の要素を持たないときにリソースを自動クローズして、リソースが漏れていないようにしたいと考えています。 Provider
クラスはSerializable
であり、StreamまたはBufferedReaderをメンバーとして持つことはできません。
これを行うには良い方法がありますか?
「AutoClosingIterator」ラッパーを作成することができます。しかし、私はそれが壊れやすいのでそれをお勧めしません:iteratorの消費者がそれを使い果たす前に失敗した場合、あなたはリソースリークを取得します。 –
提案してくれてありがとう - 私にもう少しコントロールを与える何か他に? – webuster
イテレータを放棄する消費者からあなたを救うことはできません。消費者の契約を変更するだけで助けになります。 –