Quelle est la différence dans l'utilisation de InputStream au lieu de FileInputStream lors de la création de l'objet FileInputStream
Cela peut être une sotte, mais je veux savoir le fond de l'opération de différence.
InputStream is = new FileInputStream(filepath);
FileInputStream is = new FileInputStream(filepath);
Quelle est la différence entre ces deux lignes de code et dans quels cas sont-ils utilisés.
source d'informationauteur Mathan Kumar
Vous devez vous connecter pour publier un commentaire.
FileInputStream
s'étendInputStream
: c'est une version spécialisée d'un InputStream conçu pour la lecture de fichiers.Il existe plusieurs implémentations d'un InputStream en fonction de l'utilisation.
Il est généralement conseillé d'utiliser le type le plus élevé dans votre code. Donc si votre code de lecture de données à partir d'un
InputStream
mais pas spécifiquement à partir d'unFileInputStream
vous devez utiliserInputStream
. Pourtant, si vous avez besoin de conserver les informations de votre objet en unFileInputStream
et pas seulement uneInputStream
alors vous devriez garder laFileInputStream
type.Il n'y a pas de différence réelle.
FileInputStream
s'étendInputStream
et de sorte que vous pouvez affecter à unInputStream
objet à unFileInputStream
objet. En fin de compte, c'est le même objet, de sorte que les mêmes opérations va se passer.Ce comportement est appelé Le polymorphisme et est très important dans la Programmation Orientée Objet.
Votre première ligne de code est probablement plus souhaitable que la seconde, car il n'est pas de vous enfermer dans un
FileInputStream
.C'est l'un des points forts de la programmation orientée objet. Pas de spécifier un type permet de modifier le type de contenu que vous utilisez plus tard. Si vous êtes sûr que vous aurez jamais besoin d'un
FileInputStream
ici, l'utilisation de la deuxième ligne de code.Comme les autres réponse de l'état, il n'y a pas de différence dans le comportement. C'est toujours le même objet et les mêmes méthodes seront exécutées. Vous pouvez affecter un objet de n'importe quel type qui hérite
InputStream
à cette variable.Cependant, ce que personne n'a mentionné jusqu'à présent est: Vous ne pouvez faire appel à des opérations qui sont déclarées dans
InputStream
sur cette variable. SiFileInputStream
offrirait des opérations supplémentaires, le compilateur pourrait lever une erreur si vous essayez de l'appeler. Dans ce cas, vous devez utiliserFileInputStream
que le type de la variable.Les autres réponses ont assez bien réussi, mais je voudrais ajouter le bit suivant.
Si le type de la variable de référence
is
est strictement une mise en œuvre interne de détail de votre classe, c'est à dire aucune autre classe ne sera jamais connaître, directement ou indirectement, alors il n'y a vraiment pas de différence entre les deux déclarations, même si je programme l'encontre de la plus élémentaire (InputStream) juste parce que.Cependant, si il ya le moindre soupçon de fuite FileInputStream comportement spécifique par le biais de votre classe interface, sans que cela soit indispensable pour le problème que vous essayez de résoudre, vous devez toujours programme à l'encontre de la plus élémentaire.
Bien sûr, c'est une bonne pratique et s'applique à plus de InputStreams et la comme.
Il n'y a pas de différence. Dans chaque cas, de la création d'un
FileInputStream
. Le premier est probablement le meilleur style de programmation que vous devez utiliser généralement des classesinterface
au lieu de la classe de béton pour permettre une certaine flexibilité (j'.e vous décidez d'utiliser unBufferedInputStream
).