getResourceAsStream 什么时候真正加载资源?

When Does getResourceAsStream Actually Load the Resource?

方法 getResourceAsStreamClassClassLoader 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。当阅读它时,它就被阅读了。不神秘。