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();
En règle générale, vous lirez d'abord le flux d'entrée, puis vous le fermerez. Vous pouvez envelopper FileInputStream dans un autre InputStream (ou Reader). Il sera automatiquement fermé lorsque vous fermerez le flux/le lecteur d'habillage.
S'il s'agit d'une méthode renvoyant un InputStream à l'appelant, il appartient alors à 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 du InputStream sur 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 créera, lira et fermera.
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 est un inputStream.
FileInputStream fis = new FileInputStream("c://filename");
InputStream is = fis;
fis.close();
return is;
Bien sûr, cela ne fera pas ce que vous voulez; le flux que vous retournez a déjà été fermé. Il suffit de renvoyer le FileInputStream et d’en finir. Le code appelant devrait le fermer.
Si vous encapsulez un flux dans un autre, vous ne fermez pas les flux intermédiaires, et c'est très important: vous ne les fermez pas avant d'avoir fini d'utiliser les flux externes. Parce que vous fermeriez aussi le flux externe.