118

をに変換したいのですがFileInputStreamInputStreamどうすればよいですか?

例えば

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

5 に答える 5

138
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;
于 2012-06-19T12:21:18.750 に答える
57
InputStream is = new FileInputStream("c://filename");
return is;
于 2012-06-19T12:17:38.737 に答える
38

FileInputStream入力ストリームです。

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

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

于 2012-06-19T12:16:24.733 に答える
7

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

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

あなたのコメントのいくつかに答えるために...

内容の InputStream をリモート コンシューマーに送信するには、InputStream の内容を OutputStream に書き込み、両方のストリームを閉じます。

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

于 2012-06-19T12:16:07.117 に答える
2

あるストリームを別のストリームにラップする場合、中間ストリームを閉じないでください。これは非常に重要です。外側のストリームの使用を終了する前にそれらを閉じないでください。外側のストリームも閉じるためです。

于 2012-06-19T12:18:42.357 に答える