Je veux juste convertir un FileInputStream
en un InputStream
, comment puis-je faire cela?
par exemple
FileInputStream fis = new FileInputStream("c://filename");
InputStream is = ?;
fis.close();
java
fileinputstream
Ranjan
la source
la source
File
classe enInputStream
. Votre modification suggère que c'est ce que l'auteur demande (au moins en partie), et ce n'est pas juste.Réponses:
En général, vous lisez d'abord le flux d'entrée, puis fermez-le. Vous pouvez envelopper le FileInputStream dans un autre InputStream (ou Reader). Il sera automatiquement fermé lorsque vous fermerez le flux / lecteur de wrapping.
S'il s'agit d'une méthode renvoyant un InputStream à l'appelant, il est de la responsabilité de l'appelant de fermer le flux une fois terminé. Si vous le fermez dans votre méthode, l'appelant ne pourra pas l'utiliser.
Pour répondre à certains de vos commentaires ...
Pour envoyer le contenu InputStream à un consommateur distant, vous devez écrire le contenu de InputStream dans un OutputStream, puis fermer les deux flux.
Le consommateur distant ne sait rien des objets de flux que vous avez créés. Il reçoit juste le contenu, dans un InputStream qu'il va créer, lire et fermer.
la source
la source
la source
FileInputStream est un inputStream.
Bien sûr, cela ne fera pas ce que vous voulez qu'il fasse ; le flux que vous renvoyez a déjà été fermé. Renvoyez simplement le FileInputStream et en avez terminé. Le code appelant doit le fermer.
la source
fis
bien que je ne sois pas sûr de retourner un flux fermé.fis
- vous fermez aussiis
return FileInputStream("c://filename");
dans la méthode dont le type de retour estInputStream
Si vous encapsulez un flux dans un autre, vous ne fermez pas les flux intermédiaires, et très important: vous ne les fermez pas avant d'avoir fini d'utiliser les flux externes. Parce que vous fermeriez aussi le flux extérieur.
la source