我正在尝试将 jar 文件中的类从 URL 加载到内存中,然后运行加载的类之一。我不希望用户可以访问类文件或 jar。我见过几个类似的问题,但没有得到解答。
我知道它可能会使用 URLClassLoader 和 ByteArrayInputStream/ByteArrayOutputStream。
预先感谢您的帮助。
类似的未回答的问题:
最佳答案
你走在正确的道路上(我认为)。步骤是:
- 使用 URLConnection 打开 JAR 文件的流。
- 读取流并将其写入ByteArrayOutputStream,并提取字节数组。
- 在字节数组上打开 ByteArrayInputStream,然后将其包装在 JarInputStream 中。
- 迭代 JAR 文件条目的成员,保存条目信息并将条目文件内容缓冲在内存中。
- 编写一个自定义类加载器,该加载器使用 JAR 文件条目和内容的内存缓存。
我无法向您指出示例代码,因为我找不到任何代码。
(您几乎必须将内容缓存在内存中,因为 JarFile
API 需要 RandomAccessFile
,这意味着数据位于文件系统中。在某些系统上您可以创建一个临时文件,在其上打开 RAF,取消链接,然后获取 URL 并将其写入 RAF。但这不可移植...)
我应该指出,如果您将此作为某些许可或“知识产权管理”计划的一部分,那么您可能是在浪费时间。您希望在客户端代码(即在用户计算机上运行的代码)中实现的任何实用方案都可能被破坏......除非计算机完全锁定。
关于java - 将 jar 文件中的类从 url 加载到内存,然后从所有类中运行主类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17872180/