Comment convertir FileInputStream à InputStream?
Je veux juste convertir un FileInputStream
à un InputStream
, comment puis-je le faire?
e.g
FileInputStream fis = new FileInputStream("c://filename");
InputStream is = ?;
fis.close();
- ranjan. Pouvez-vous s'il vous plaît changer la bonne réponse à ce post. La réponse actuelle est subpar. Si vous le remplacez par celui ci-dessous qui serait optimal.
- C'était juste une question idiote.. j'ai été de ne pas avoir une bonne idée sur la sérialisation... tout on peut se référer à @sudocode
- il peut-être une question stupide, mais beaucoup de gens continuent à se référer à cette question parce que c'est utile.
- Je suis venu ici à la recherche pour réel de la conversion de
File
classe deInputStream
. Votre modifier suggère qu'est ce que l'auteur demande (au moins en partie), et il n'est pas juste. - J'ai simplement modifié la mise en forme, je ne pense pas que j'ai changé le sens. Si vous avez encore de l'objet, n'hésitez pas à annuler mes modifications. Ce sera examinée par la communauté. Par la route: comment savez-vous ce que l'auteur veut sauf ce que la question est maintenant?
- Je vois dans l'historique des modifications. Vous changez simple "fichier" forld à
File
, qui suggèrent que c'est à propos de laFile
classe. Et ce n'est pas le cas, je vois à partir de l'exemple dans le post original que l'auteur a été intéressé par la conversionFileInputStream
(bien qu'il en fait écrit "fichier" là-bas). - comme je l'ai dit: Si vous pensez que la modification est incorrect, vous pouvez le corriger. Je ne voulais pas interpréter trop. merci de parler avec moi sur ce sujet 🙂
Vous devez vous connecter pour publier un commentaire.
Règle générale, vous avez une première lecture, à partir du flux d'entrée et le fermer. Vous pouvez envelopper le FileInputStream dans un autre InputStream (ou Lecteur). Il sera automatiquement fermé lorsque vous fermez l'emballage de flux/lecteur.
Si c'est une méthode retournant un InputStream à l'appelant, puis c'est à l'appelant de la responsabilité de fermer le flux de données lorsque vous avez terminé avec elle. Si vous fermez dans votre méthode, l'appelant ne sera pas en mesure de l'utiliser.
De répondre à certaines de vos commentaires...
Pour envoyer le contenu InputStream à distance à un consommateur, vous écrivez le contenu de l'InputStream à un OutputStream, puis fermez les deux flux.
La distance consommateur ne sait rien sur les objets de flux que vous avez créé. Il reçoit juste le contenu, dans un InputStream qui il va créer, lire et fermer.
FileInputStream est un inputStream.
Bien sûr, ce ne sera pas faire ce que vous voulez qu'il fasse; le flux de retour a déjà été fermé. Il suffit de retourner le FileInputStream et être fait avec elle. Le code appelant doit la fermer.
fis
bien que je ne suis pas sûr de revenir un fermé de flux.fis
- vous également à proximitéis
return FileInputStream("c://filename");
dans la méthode dont le type de retour estInputStream
FileInputStream fis = new FileInputStream("congfig.property");
fonctionne si le fichierconfig.property
est conservé dans le dossier du projet.Si vous envelopper l'un flux dans l'autre, vous ne fermez pas intermédiaire cours d'eau, et très important: Vous n'avez pas les fermer avant de finir à l'aide de l'extérieur ruisseaux. Parce que vous fermez l'extérieur de flux de trop.