制限のないストリームから開始し、limit()メソッドを使用してバインドを設定すると、制限に達するとStreamで使用されたリソースをどのようにクリーンアップできますか?例えば、私はFiles.linesメソッドが何をやろうとしているが、山車、文字列の代わりに、私は次のようになります機能を記述した場合:Java8ストリームの後にクリーンアップ
public static Stream<Float> floats(File f) throws FileNotFoundException {
FileInputStream fis = new FileInputStream(f);
return Stream.generate(() -> {
byte[] buff = new byte[4];
try { fis.read(buff); }
catch (Exception e) { e.printStackTrace(); }
return ByteBuffer.wrap(buff).getFloat(0);
}).limit(f.length()/4);
}
これは、大規模なバイナリファイルをストリーミングする必要があります私がファイルの終わりに達するまでフロートがいっぱいです。フロートを構成する4バイトでファイルの長さをバイトで割ります。しかし、私はこの限界に達するとfis.close()を実行する何らかの方法を見つけたいと思います。 Streams APIにはこれを行う方法がありますか?
'fis'を閉じて、あなたのメソッドがそれを閉じなければならない' Stream'を返すと言うことを文書化する 'onClose'を提供できます。 –
あなたの例外処理は疑わしいものです。 – Holger