2010-06-17 4 views

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 pour foo.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.