2016-07-04 14 views
5

Font#loadFontのドキュメントを見て、私はこの言葉に出くわした:なぜ `loadFont`は入力ストリームを閉じませんか?私はそれを閉じなければならない?

このメソッドは、入力ストリームを閉じません。

残念ながら、これは説明したりすると拡大されていません。だから私の質問は次のとおりです:

  1. APIが入力ストリームを閉じることができない理由は何ですか?ストリームを再利用したいのですか? 私は主にこのように、このメソッドを使用します。

    Font.loadFont(getClass().getResourceAsStream("path/to/font"), 13.0); 
    

    はフォントが自分のアプリケーションのために利用可能であることを確認するために、私は決して、入力ストリームを再使用していない、と私は本当に私がしたい理由を考えることはできませんをしたい。

  2. 私は入力は自分自身をストリーミング閉じるべきでしょうか?私が入力ストリームを閉じていないと、何か問題があると思いますか? は、過去に私はしばらく他の人がフォントに問題が(同じシーンに!)、このフォントで構成されたいくつかのラベルは正方形を示し始め、このように、ロードされた細かい作業に保たなければなりませんでした。これは入力ストリームを閉じないことに関連していますか?
+6

それはあなたが開かなかったストリームを閉じるべきではありません親指の良いルールです。この場合、メソッドはそれをオープンしないので、メソッドも閉じません。たとえば、標準入力ストリームを渡すことができない理由はありません。メソッドがパラメータストリームを閉じた場合は、後で別の処理を行うために開いておく必要がある場合は、詰め込みます。 –

+0

そして、いいえ、あなたは自分でそれを閉じてはいけません。 –

+1

@AndyTurner - try-with-resourcesを使用することは、それを自分で閉じることと同じです。構文的な砂糖だけです。私が意味することは、私がそれを閉じることに責任があるか、それを開いて決してそれを閉じることは正当であるかどうかです。 – Itai

答えて

1

不足しているリソースや外部リソース(ファイル記述子やストリームなど)を含むすべてのAPIのドキュメントでは、その責任を明確にする必要があります(この場合はストリームを閉じます)。これは「所有権」と呼ばれることもあります。

この場合、ドキュメントはloadFontメソッドは、ストリームの所有権を取得しないと述べています。したがって、それはあなたのものです。ストリームを閉じるのはあなたの責任です。

のtry-と、リソースのステートメントは、これを行うための最善の方法です。

関連する問題