【问题标题】:Why getResourceAsStream method is in Class class?为什么 getResourceAsStream 方法在 Class 类中?
【发布时间】:2011-03-04 22:11:46
【问题描述】:

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

【问题讨论】:

    标签: java java-me embedded-resource


    【解决方案1】:

    与类有关系:

    • 考虑了类的包 - 如果你在类上调用getResourceAsStream("baz.txt")foo.bar.SomeClass,它将寻找/foo/bar/baz.txt
    • 首先考虑类加载器来查找资源 - 如果它是静态方法,它如何知道要查看哪些 jar 文件(等)?除了系统类加载器之外,还有更多的生命

    【讨论】:

      【解决方案2】:

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

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

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

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

      ...和Class类没有关系。

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

      【讨论】:

        猜你喜欢
        • 2014-12-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-09-19
        • 1970-01-01
        • 2015-08-22
        • 1970-01-01
        • 2015-10-10
        相关资源
        最近更新 更多