Bagaimana cara mengonversi FileInputStream ke InputStream? [Tutup]

116

Saya hanya ingin mengubah a FileInputStreammenjadi an InputStream, bagaimana cara melakukannya?

misalnya

FileInputStream fis = new FileInputStream("c://filename");
InputStream is = ?; 
fis.close();
ranjan
sumber
3
ranjan. Bisakah Anda mengubah jawaban yang benar untuk posting ini. Jawaban saat ini di bawah standar. Jika Anda mengubahnya menjadi yang di bawah ini akan menjadi optimal.
Whitecat
Itu hanya pertanyaan konyol .. Saya tidak memiliki ide yang tepat tentang serialisasi ... siapa pun dapat merujuk ke @sudocode
ranjan
4
itu mungkin pertanyaan yang konyol tapi banyak orang masih merujuk pertanyaan ini karena berguna.
Whitecat
1
@WilliMentzel Saya datang ke sini mencari konversi aktual dari Filekelas ke InputStream. Hasil edit Anda menunjukkan bahwa itulah yang diminta penulis (setidaknya sebagian), dan itu tidak benar.
Jalur
@ Line Saya hanya mengubah formatnya. Saya rasa saya tidak mengubah artinya. Jika Anda masih keberatan, silakan kembalikan perubahan saya. Ini akan ditinjau oleh komunitas kemudian. Ngomong-ngomong: bagaimana Anda tahu apa yang dimaksud penulis kecuali apa pertanyaannya sekarang?
Willi Mentzel

Jawaban:

7

Anda biasanya pertama-tama membaca dari aliran input dan kemudian menutupnya. Anda dapat menggabungkan FileInputStream di InputStream (atau Reader) lain. Ini akan ditutup secara otomatis ketika Anda menutup aliran / pembaca pembungkus.

Jika ini adalah metode yang mengembalikan InputStream ke pemanggil, maka tanggung jawab pemanggil untuk menutup streaming setelah selesai. Jika Anda menutupnya dengan metode Anda, penelepon tidak akan dapat menggunakannya.

Untuk menjawab beberapa komentar Anda ...

Untuk mengirim konten InputStream ke konsumen jarak jauh, Anda akan menulis konten InputStream ke OutputStream, lalu menutup kedua aliran.

Konsumen jarak jauh tidak tahu apa-apa tentang objek aliran yang telah Anda buat. Dia baru saja menerima konten, dalam InputStream yang akan dia buat, baca, dan tutup.

sudocode
sumber
bagaimana jika saya ingin mengirim inputstream melalui surat. .. apakah mungkin untuk menutup di sisi lain .. atau tidak perlu ditutup
ranjan
2
Objek aliran itu sendiri tidak dapat diserialkan. Konten aliran dapat diserialkan - dengan menulis konten ke OutputStream
sudocode
Sebenarnya tujuan saya adalah mengirim file .. Saya tidak ingin ada yang berjalan setelah saya mengirim .. misalnya seolah-olah saya mengirim string .. sehingga pihak lain tidak perlu khawatir menutup apapun.
ranjan
1
File juga tidak dapat diserialkan. Tetapi konten file dapat diserialkan menggunakan OutputStream.
sudocode
apakah mungkin saya akan menunggu beberapa waktu tertentu dan kemudian menutup aliran input, misalnya tergantung pada ukuran file
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;
Kumar Vivek Mitra
sumber
12
Mengapa "is.close ()" dipanggil sebelum "adalah" dikembalikan di akhir.
Talespin_Kit
57
InputStream is = new FileInputStream("c://filename");
return is;
Sumit Singh
sumber
2
Itulah jawabannya!
andreikashin
36

FileInputStream adalah inputStream.

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

Tentu saja, ini tidak akan melakukan apa yang Anda inginkan ; aliran yang Anda kembalikan telah ditutup. Cukup kembalikan FileInputStream dan selesaikan. Kode panggilan harus menutupnya.

Joeri Hendrickx
sumber
atau hanya kembali fismeskipun saya tidak yakin tentang mengembalikan aliran tertutup.
Bala R
6
Ini bodoh - jika Anda menutup fis- Anda juga menutupis
RonK
1
jika saya menutup data file tidak terkirim
ranjan
2
@Ron memang. Itulah mengapa saya menyebutkannya.
Joeri Hendrickx
3
Hanya kode yang lebih singkat return FileInputStream("c://filename");dalam metode yang jenis kembaliannya adalahInputStream
Yatendra Goel
2

Jika Anda menggabungkan satu aliran ke aliran lain, Anda tidak menutup aliran perantara, dan sangat penting: Anda tidak menutupnya sebelum menyelesaikan menggunakan aliran luar. Karena Anda juga akan menutup aliran luar.

Pengguna tidak diketahui
sumber