FileInputStreamをInputStreamに変換する方法は?[閉まっている]


116

私はちょうど変換するFileInputStreamにはInputStream、私はそれを行うことができますか、?

例えば

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

3
ランジャン。この投稿の正解を変更してください。現在の答えは不十分です。以下のように変更すると最適です。
Whitecat、2013年

それはばかげた質問でした...私はシリアル化について適切な考えを持っていませんでした...誰でも@sudocodeを参照できます
ranjan

4
ばかげた質問かもしれませんが、有用であるため、多くの人がまだこの質問に言及しています。
Whitecat、

1
@WilliMentzel Fileクラスからへの実際の変換を探してここに来ましたInputStream。あなたの編集は、それが著者が(少なくとも部分的に)求めているものであることを示唆していますが、それは正しくありません。
ライン

@Line書式を変更しただけで、意味が変わったとは思いません。それでも異論がある場合は、変更を自由にロールバックしてください。これはその後コミュニティーによって検討されます。ちなみに、質問の内容を除いて、作者の意味をどうやって知るのですか。
ウィリーメンツェル2018

回答:


7

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

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

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

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

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


メールで入力ストリームを送信する場合はどうすればよいですか。..反対側で閉じることは可能ですか..または閉じる必要はありません
ランジャン

2
ストリームオブジェクト自体はシリアル化できません。ストリームのコンテンツは、コンテンツをOutputStreamに書き込むことによってシリアル化できます
sudocode

実際のところ、私の目的はファイルを送信することです。送信した後は何も実行したくありません。
ランジャン2012年

1
ファイルもシリアライズ可能ではありません。ただし、ファイルのコンテンツは、OutputStreamを使用してシリアル化できます。
sudocode '19年

たとえばファイルのサイズに応じて、特定の時間待機してから入力ストリームを閉じることは可能ですか
ranjan

136
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;

12
「is」が最後に返される前に「is.close()」が呼び出されるのはなぜですか。
Talespin_Kit


36

FileInputStream inputStreamです。

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

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


またはfis閉じたストリームを返すかどうかはわかりませんが、単に戻ります。
Bala R

6
これは愚かです-あなたが閉じるとfis-あなたも閉じるis
RonK

1
ファイルを閉じると、データは送信されません
ランジャン

2
@RonK確かに。それが私がそれを言及する理由です。
Joeri Hendrickx 2012

3
return FileInputStream("c://filename");戻り型が次のメソッドのより簡単なコードInputStream
Yatendra Goel

2

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.