gpt4 book ai didi

java - ClassLoader.getSystemResourceAsStream 和 getClass().getResourceAsStream() 的区别

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:09:45 25 4
gpt4 key购买 nike

给定这段代码:

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

两者是否返回相同的资源(我认为答案是"is")?

它们都访问“相同”的类路径吗?为什么 #1 中的方法名称是“get System ResourceAsStream”,而对于 #2 它只是“getResourceAsStream”?

谢谢

最佳答案

关键区别在于类加载器。

下面使用System ClassLoader
ClassLoader.getSystemResourceAsStream("foobar.txt");

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

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

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

关于java - ClassLoader.getSystemResourceAsStream 和 getClass().getResourceAsStream() 的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7615040/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com