web-dev-qa-db-ja.com

FileInputStreamをInputStreamに変換する方法

FileInputStreamInputStreamに変換したいのですが、どうすればいいですか。

例えば

FileInputStream fis = new FileInputStream("c://filename");
InputStream is = ?; 
fis.close();
114
ranjan

通常は最初に入力ストリームから読み込み、次にそれを閉じます。 FileInputStreamを別のInputStream(またはReader)にラップすることができます。ラッピングストリーム/リーダーを閉じると自動的に閉じます。

これが呼び出し元にInputStreamを返すメソッドである場合、それが終了したらストリームを閉じるのは呼び出し側の責任です。メソッドで閉じると、呼び出し側はそれを使用できなくなります。

あなたのコメントに答えるには...

コンテンツInputStreamをリモートコンシューマに送信するには、InputStreamのコンテンツをOutputStreamに書き込んでから、両方のストリームを閉じます。

リモートコンシューマは、作成したストリームオブジェクトについて何も知りません。彼はコンテンツをInputStreamで受け取り、それを自分で作成し、読み取り、閉じます。

6
sudocode
InputStream is;

try {
    is = new FileInputStream("c://filename");

    is.close(); 
} catch (FileNotFoundException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
} catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}

return is;
132
InputStream is = new FileInputStream("c://filename");
return is;
54
Sumit Singh

FileInputStreaminputStreamです。

FileInputStream fis = new FileInputStream("c://filename");
InputStream is = fis;
fis.close();  
return is;

もちろん、これはあなたがやりたいことをしないでしょう;あなたが返すストリームは既に閉じられています。 FileInputStreamを返すだけで完了です。呼び出しコードはそれを閉じるべきです。

35
Joeri Hendrickx

あるストリームを別のストリームにラップしても、中間ストリームは閉じません。非常に重要です。外側のストリームの使用を終了する前にそれらを閉じないでください。あなたは外側のストリームも閉じるだろうから。

2
user unknown