为什么getResourceAsStream方法在Class类中?

时间:2010-06-17 11:31:31

标签: java java-me embedded-resource

为什么public InputStream getResourceAsStream(String name)在Class类中?它只给出了jar文件中的文件输入流,与Class类没有关系。所以它可以是静态方法,它可以在任何类中。

2 个答案:

答案 0 :(得分:9)

与班级的关系:

  • 考虑到课程的套餐 - 如果您在getResourceAsStream("baz.txt")的课程上致电foo.bar.SomeClass,则会查找/foo/bar/baz.txt
  • 首先考虑类加载器以查找资源 - 如果它是静态方法,它将如何知道要查看哪些jar文件(等)?生活比系统类加载器还要多。

答案 1 :(得分:1)

  

它只是给jar文件中的文件的输入流...

不正确的。并非所有类加载器都从常规JAR文件加载资源。

  • 某些类加载器从目录加载。
  • 某些类加载器从网络加载。
  • 某些类加载器从多个源加载。

在这种情况下,通过ClassLoader使用Class API时,所有这些复杂性都是隐藏的。

  

......与班级没有关系。

不正确的。请参阅@Jon Skeet的回答。请注意,调用Class.getResourceAsStream(String)会提供与该类属于同一安全上下文的资源。如果正在使用多个类加载器/安全上下文,这可能非常重要。