执行内存中的 jar
Posted
技术标签:
【中文标题】执行内存中的 jar【英文标题】:Executing an in memory jar 【发布时间】:2012-09-04 08:58:47 【问题描述】:假设我有一个 java 进程,它以字节 [] 的形式从受信任的进程接收可运行的 jar 文件,有没有一种方法可以调用它而无需将 jar 文件写入磁盘然后调用它(启动一个正在运行 jar 的新进程)?
【问题讨论】:
任何执行都从类加载器开始,该类加载器从URL
加载类文件并进一步处理它。首先,您希望完成的事情似乎是不可能的,但不确定是否有任何类加载器黑客可以解决问题。
【参考方案1】:
这里有一种方法可以实现:
-
从收到的
byte []
创建一个ByteArrayInputStream
。
现在使用JarInputStream
创建 jar 文件的内存表示。
ByteArrayInputStream bis = new ByteArrayInputStream(byteArray);
JarInputStream jis = new JarInputStream(bis);
这样,您就可以将 jar 加载到内存中。
现在您可以使用自定义类加载器来进一步处理它。这里是one example,你可以参考。【讨论】:
【参考方案2】:最简单的方法是将其写入 ramdisk 并完全避免内存中的想法。
【讨论】:
+1 您可以使用自定义类加载器来执行此操作,但这比写入文件要困难 100 倍。 你不能在 Java 中做到这一点,除非你有大量的安全权限来做一些事情,比如编辑系统挂载点。在 linux 中,您可以通过执行外部脚本来做到这一点,但理想情况下,您可以通过服务器的引导脚本来设置它。我在 ubuntu 中使用此链接 kevingunn.org/?p=210 执行此操作。以上是关于执行内存中的 jar的主要内容,如果未能解决你的问题,请参考以下文章