2016-03-02 12 views
5

私はこのようなJava BufferedReaderからテキストを読んでいます。 .whenDoneのようなものがStreamに存在することを願っています。したがって、すべてが消費された後に読者を閉じて、.takeWhile(_ != null)を実行してもらうことができます。ストリームを「閉じる」?</p> <pre><code>Stream.continually(reader.readLine).takeWhile { case null => reader.close; false case _ => true } </code></pre> <p>これは動作しますが、ちょうど私には少し不器用なようだ:

私にはわからないことがいくつかありますか?または、おそらく、より良い方法は、からの行のストリームを取得する(もしそれがInputStreamだったら、私はちょうどSource.fromInputStreamを行うことができましたが、Readerのための等価ではないようです...しかし、他の "closable"オブジェクト(例えば、ResultSetなど)で同じことをしたいかもしれないので、問題を部分的にしか解決できません。

答えて

1

.whenDoneの動作は、別のStreamを追加して取得できます。 これは、コードを少し表現力豊かにし、他の場合にも使用することができます。それは何かですが、私は完璧とはかけ離れていると思います。

def closeStream: Stream[Nothing] = { 
    reader.close 
    Stream.Empty 
} 

Stream.continually(reader.readLine).takeWhile(_ != null) #::: closeStream