getResourceAsStream 什么时候真正加载资源?
When Does getResourceAsStream Actually Load the Resource?
方法 getResourceAsStream
在 Class
和 ClassLoader
return 和 InputStream
中。这个 InputStream
是否真的在调用 getResourceAsStream
时加载所有内容,或者它只是指向某个系统在请求部分资源时加载资源?
When does getResourceAsStream
actually load the resource?
该方法只是打开一个流来读取资源。它没有 "load" 它。
流的实际行为将特定于实现(例如 classloader),但通用 ClassLoader
API 文档中没有任何建议 1 class加载程序 应该 将资源预读到内存中。
如果您想要一个classloader来做那件事,您可以写一个自定义的
class装载机.
如果您想确保特定的 classloader 不会 这样做
...阅读源代码。然后 如有必要 使用不同的 class 加载器,它不会那样做,或者实现你自己的 2.
1 - 甚至没有方法或 class 名称,IMO。 "classloader" 加载 classes,我读 "load" 这个词具有特定的技术含义,不适用于其他事物。
2 - 可能存在无法做到这一点的模糊情况。例如,从需要在单个 I/O 操作中读取数据的设备读取的 classloader。
这是一个 InputStream
。当你阅读它时,它就被阅读了。不神秘。
方法 getResourceAsStream
在 Class
和 ClassLoader
return 和 InputStream
中。这个 InputStream
是否真的在调用 getResourceAsStream
时加载所有内容,或者它只是指向某个系统在请求部分资源时加载资源?
When does
getResourceAsStream
actually load the resource?
该方法只是打开一个流来读取资源。它没有 "load" 它。
流的实际行为将特定于实现(例如 classloader),但通用 ClassLoader
API 文档中没有任何建议 1 class加载程序 应该 将资源预读到内存中。
如果您想要一个classloader来做那件事,您可以写一个自定义的 class装载机.
如果您想确保特定的 classloader 不会 这样做 ...阅读源代码。然后 如有必要 使用不同的 class 加载器,它不会那样做,或者实现你自己的 2.
1 - 甚至没有方法或 class 名称,IMO。 "classloader" 加载 classes,我读 "load" 这个词具有特定的技术含义,不适用于其他事物。
2 - 可能存在无法做到这一点的模糊情况。例如,从需要在单个 I/O 操作中读取数据的设备读取的 classloader。
这是一个 InputStream
。当你阅读它时,它就被阅读了。不神秘。