118 votes

Comment convertir FileInputStream en InputStream ?

Je veux juste convertir un FileInputStream à un InputStream Comment puis-je faire ça ?

Par exemple

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

3 votes

Ranjan. Pouvez-vous s'il vous plaît changer la réponse correcte à ce poste. La réponse actuelle est médiocre. Si vous la remplacez par la réponse ci-dessous, ce sera optimal.

0 votes

C'était juste une question stupide... Je n'avais pas une idée correcte de la sérialisation ... quelqu'un peut se référer à @sudocode

4 votes

Il s'agit peut-être d'une question stupide, mais de nombreuses personnes s'y réfèrent encore parce qu'elle est utile.

138voto

Kumar Vivek Mitra Points 19369
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;

13 votes

Pourquoi le "is.close()" est-il appelé avant que le "is" ne soit retourné à la fin.

57voto

Sumit Singh Points 8601
InputStream is = new FileInputStream("c://filename");
return is;

2 votes

C'est la réponse !

38voto

Joeri Hendrickx Points 6957

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 qu'il fasse. le flux que vous retournez a déjà été fermé. Il suffit de renvoyer le FileInputStream et d'en finir avec lui. Le code appelant doit le fermer.

0 votes

Ou simplement retourner fis bien que je ne sois pas sûr du retour d'un flux fermé.

6 votes

C'est stupide - si vous fermez fis - vous fermez également is

1 votes

Si je ferme le fichier, les données ne sont pas envoyées

7voto

sudocode Points 9483

En général, vous commencez par lire le flux d'entrée, puis vous le fermez. Vous pouvez envelopper le FileInputStream dans un autre InputStream (ou lecteur). Il sera automatiquement fermé lorsque vous fermerez le flux/lecteur d'enveloppement.

S'il s'agit d'une méthode renvoyant un InputStream à l'appelant, il incombe à ce dernier de fermer le flux lorsqu'il en a terminé. Si vous le fermez dans votre méthode, l'appelant ne sera pas en mesure de l'utiliser.

Pour répondre à certains de vos commentaires...

Pour envoyer le contenu de l'InputStream à un consommateur distant, il faut écrire le contenu de l'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 simplement le contenu, dans un InputStream qu'il va créer, lire et fermer.

0 votes

Que faire si je veux envoyer un flux d'entrée par mail. est-il possible de le fermer de l'autre côté ou n'est-il pas nécessaire de le fermer ?

2 votes

L'objet stream lui-même n'est pas sérialisable. Le contenu du flux peut être sérialisé - en écrivant le contenu dans un OutputStream

0 votes

En fait, mon objectif est d'envoyer un fichier Je ne veux rien faire fonctionner une fois que j'ai envoyé par exemple comme si j'envoyais une chaîne de caractères pour que l'autre partie n'ait pas à se soucier de fermer quoi que ce soit.

2voto

user unknown Points 15555

Si vous enroulez 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. Car vous fermeriez également le flux externe.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X