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();
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();
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.
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.
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 ?
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
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.
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.
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.
1 votes
@WilliMentzel Je suis venu ici pour chercher une conversion réelle de
File
à la classeInputStream
. Votre montage suggère que c'est ce que l'auteur demande (au moins partiellement), et ce n'est pas correct.0 votes
@Line j'ai simplement changé le formatage, je ne pense pas avoir changé le sens. Si vous avez encore des objections, n'hésitez pas à annuler mes modifications. Cela sera alors revu par la communauté. Au fait : comment savez-vous ce que l'auteur a voulu dire, si ce n'est par ce que la question est maintenant ?
0 votes
@WilliMentzel Je vois dans l'historique des modifications. Vous changez le simple "file" forld en
File
qui suggèrent qu'il s'agit de laFile
classe. Et ce n'est pas le cas, je vois d'après l'exemple dans le message original que l'auteur était intéressé par la conversion.FileInputStream
(bien qu'il ait en fait écrit "fichier" à cet endroit).0 votes
@Line comme je l'ai dit : Si vous pensez que le montage est erroné, vous pouvez le corriger. Je ne voulais pas trop interpréter. Merci de m'avoir parlé de cette question :)