web-dev-qa-db-fra.com

Comment convertir FileInputStream en InputStream?

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();
115
ranjan

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.

6
sudocode
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;
132
Kumar Vivek Mitra
InputStream is = new FileInputStream("c://filename");
return is;
54
Sumit Singh

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.

35
Joeri Hendrickx

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.

2
user unknown