2011-01-23 17 views
2

ほとんどの場合、入力/出力ストリームを扱うプロジェクトがあります。だから私はストリームを引数として渡し、サードパーティライブラリからそれらを受け取らなければなりません。 Good design: How to pass InputStreams as argument?Closing Java InputStreamsを読みましたが、第三者が同じコーディング値を共有していること、そして最高のデザインパターン(特に "ストリームを開く人がストリームを閉じるべきである")を100%確信しているわけではありません。サードパーティの入出力ストリームをどのように扱うべきですか?

  1. 私が今まで私から得たストリームをクローズしようとする必要があります:SOコミュニティと私はCPUとメモリリソースのタイトなよ、ここからJavaへのいくつかの質問です - ストリームが(の3Gb 500MB)かなり大きいと仮定すると

    サードパーティのライブラリですか?

  2. 閉鎖されていないストリーム(余分なGCワークロードを数えずに)の危険な影響は何か
  3. これらの影響はストリームのサイズにいくらか比例していますか?

答えて

2
  1. 最後までストリームを閉じる必要があります。渡しているライブラリがこれをしたくない場合、close()を無視するようにストリームをラップする必要があります。
  2. 非公開ストリームはリソースを開いたままにします。開いているファイルは削除できません。
  3. サイズは重要ではありません。
+0

ありがとう、バイト配列、文字列、XML DOMなどの変数から派生したストリームはどうですか?私はストリームを閉じるまで、これらの内部のサードパーティのバールが私のヒープサイズを食べるだろうと思いますか? – Osw

+0

通常、メモリモデルはストリームまたはオブジェクトを保持しているオブジェクトでクリーンアップされ、GCされます。それらを閉じてもほとんど違いはありません。それらを閉じると、ソケット/ファイルのような "外部"リソースに違いがあります。それらは最終的にGCでも閉じられますが、GCが実行される前にファイル記述子を使い果たすことができます。 –

関連する問題