2011-07-14 14 views
2

PlayフレームワークにrenderBinaryというレンダリングメソッドがあり、InputStreamをレンダリングすることができます。Play FrameworkでrenderBinary()呼び出し後のInputStreamを閉じる

renderBinary()メソッド呼び出しの後にコードが実行されないことは私の理解であったので、InputStreamを閉じるにはどうすればいいですか?

FileInputStream inputStream = null; 
    try{ 
     //create temp file 
     File tempFile = File.createTempFile("foobar", ".txt"); 

     inputStream = new FileInputStream(tempFile); 

     //delete temp file 
     tempFile.delete(); 

     //download the file as held in the inputstream 
     renderBinary(inputStream, foobar + ".txt"); 
    } 
    catch(Exception e){ 
     throw e; 
    } 
    finally { 
     if(inputStream != null) 
      inputStream.close(); 
    } 

が、これはInputStreamまたはfinallyが呼び出されることはありません飽きないでしょうを閉じる適切な方法のようになります。

は、次の例を見てみましょうか?

「試してみてください」という回答があり、試してみましたが、大きなファイルを何度も高速にダウンロードすると「」のエラーメッセージが表示されません。 InputStreamが実際に閉鎖されているかどうかを確認するためにどうすればいいのか分かりません。

+0

FileInputStreamを使用してそのファイルへの接続を開いた後でファイルを削除しても安全ですか?ファイルが8KBより大きい場合、InputStreamの後続の 'read'はエラーになりませんか? – Poojan

答えて

4

implementsコードが閉じているクラスのsource codeを確認することができます。ソースをダウンロードしてあなたのプロジェクトにリンクすることをお勧めします。Playは見た目の裏にあるいくつかの「魔法」を行います:)

+1

ありがとう、それは私が探していたものです。 playが実際に 'InputStream'を閉じるのは興味深いことです。私は、Playがその奴隷の上に多くのトリックを持っているので、私は確かにドキュメントをより慎重にチェックする予定です! –

関連する問題