2

我正在尝试将 jar 文件中的类从 URL 加载到内存中,然后运行其中一个加载的类。我不希望用户可以访问类文件或 jar。我见过几个类似的问题,但没有得到答案。

我知道它可能会使用 URLClassLoader 和 ByteArrayInputStream/ByteArrayOutputStream。

提前感谢您的帮助。

类似未回答的问题:

如何在不下载的情况下从 URL 加载 jar?

从 URL 加载 jar

4

1 回答 1

2

你走在正确的轨道上(我认为)。步骤是:

  1. 使用 URLConnection 打开指向 JAR 文件的流。
  2. 读取流并将其写入 ByteArrayOutputStream,并提取字节数组。
  3. 在字节数组上打开一个 ByteArrayInputStream,然后将其包装在一个 JarInputStream 中。
  4. 遍历JAR文件的入口成员,保存入口信息,并将入口文件内容缓存在内存中。
  5. 编写一个使用 JAR 文件条目和内容的内存缓存的自定义类加载器。

我无法指出示例代码,因为我找不到任何代码。

(您几乎必须将内容缓存在内存中,因为JarFileAPI 需要 aRandomAccessFile并且这意味着数据在文件系统中。在某些系统上,您可以创建一个临时文件,在其上打开一个 RAF,取消链接,然后获取并将 URL 写入 RAF。但这不是可移植的......)


我应该指出,如果您将此作为某些许可或“知识产权管理”计划的一部分,您可能是在浪费时间。您希望在客户端代码(即在用户机器上运行的代码)中实现的任何实用方案都可能被破坏......除非机器完全被锁定。

于 2013-07-26T03:39:50.513 回答