鉴于此代码:
/* 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(使用前将#替换为@)