ClassLoader.getSystemResourceAsStream 和 getClass().getResourceAsStream() 之间的区别

2024-02-15

鉴于此代码:

/* 1 */ InputStream in1 = ClassLoader.getSystemResourceAsStream("foobar.txt");
/* 2 */ InputStream in2 = this.getClass().getResourceAsStream("/foobar.txt");

两者都返回相同的资源吗(我认为答案是“是”)?

他们都访问“相同”的类路径吗?为什么#1 中的方法名称是“getSystemResourceAsStream”,但对于#2来说它只是“getResourceAsStream”?

Thanks


主要区别在于类加载器。

下面使用系统类加载器
ClassLoader.getSystemResourceAsStream("foobar.txt");

虽然这个使用了返回的类加载器getClass()
this.getClass().getResourceAsStream("/foobar.txt");

换句话说,两个语句的行为是否完全相同取决于应用程序类加载器。对于简单的应用程序,两者都引用相同的类加载器。然而,对于大多数应用程序(例如在 Servlet 容器中运行的 Web 应用程序),情况并非如此。

一般来说,我认为 getClass().getResourceAsStream() 将是更好的选择,因为它将使用与代码所属的类相同的类加载器。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ClassLoader.getSystemResourceAsStream 和 getClass().getResourceAsStream() 之间的区别 的相关文章

随机推荐