FileInputStream
をInputStream
に変換したいのですが、どうすればいいですか。
例えば
FileInputStream fis = new FileInputStream("c://filename");
InputStream is = ?;
fis.close();
通常は最初に入力ストリームから読み込み、次にそれを閉じます。 FileInputStreamを別のInputStream(またはReader)にラップすることができます。ラッピングストリーム/リーダーを閉じると自動的に閉じます。
これが呼び出し元にInputStreamを返すメソッドである場合、それが終了したらストリームを閉じるのは呼び出し側の責任です。メソッドで閉じると、呼び出し側はそれを使用できなくなります。
あなたのコメントに答えるには...
コンテンツInputStreamをリモートコンシューマに送信するには、InputStreamのコンテンツをOutputStreamに書き込んでから、両方のストリームを閉じます。
リモートコンシューマは、作成したストリームオブジェクトについて何も知りません。彼はコンテンツをInputStreamで受け取り、それを自分で作成し、読み取り、閉じます。
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;
InputStream is = new FileInputStream("c://filename");
return is;
FileInputStreamはinputStreamです。
FileInputStream fis = new FileInputStream("c://filename");
InputStream is = fis;
fis.close();
return is;
もちろん、これはあなたがやりたいことをしないでしょう;あなたが返すストリームは既に閉じられています。 FileInputStreamを返すだけで完了です。呼び出しコードはそれを閉じるべきです。
あるストリームを別のストリームにラップしても、中間ストリームは閉じません。非常に重要です。外側のストリームの使用を終了する前にそれらを閉じないでください。あなたは外側のストリームも閉じるだろうから。