Pourquoi public InputStream getResourceAsStream (nom de la chaîne) est dans la classe Classe? Il donne juste inputtream du fichier qui est dans le fichier jar et il n'y a pas de relation avec la classe Class. donc ça peut être une méthode statique et ça peut être dans n'importe quelle classe.Pourquoi la méthode getResourceAsStream est-elle dans la classe Class?
7
A
Répondre
9
Il est une relation à la classe:
- Le paquet de la classe est prise en compte - si vous donnez appel
getResourceAsStream("baz.txt")
la classe pourfoo.bar.SomeClass
il cherchera/foo/bar/baz.txt
- Le classloader est pris en compte pour trouver les ressources en premier lieu - s'il s'agissait d'une méthode statique, comment connaîtrait-il les fichiers jar (etc) à regarder? Il y a plus à la vie que le système classloader
1
Il vient donner inputstream de fichier qui est dans le fichier jar ...
incorrect. Tous les classloaders ne chargent pas les ressources du fichier JAR standard.
- Certains chargeurs de classe sont chargés à partir des répertoires.
- Certains chargeurs de classe sont chargés à partir du réseau.
- Certains chargeurs de classe sont chargés à partir de plusieurs sources.
Toute cette complexité est caché lorsque vous utilisez l'API ClassLoader
via Class
dans ce cas.
... et il n'y a pas de relation avec la classe Class.
Incorrect. Voir la réponse de @Jon Skeet. Notez qu'appeler Class.getResourceAsStream(String)
donne une ressource qui appartient au même contexte de sécurité que la classe. Cela peut être très important si plusieurs chargeurs de classe/contextes de sécurité sont utilisés.