【问题标题】:Executing an in memory jar执行内存中的 jar
【发布时间】:2012-09-04 08:58:47
【问题描述】:

假设我有一个 java 进程,它以字节 [] 的形式从受信任的进程接收可运行的 jar 文件,有没有一种方法可以调用它而无需将 jar 文件写入磁盘然后调用它(启动一个正在运行 jar 的新进程)?

【问题讨论】:

  • 任何执行都从类加载器开始,该类加载器从URL 加载类文件并进一步处理它。首先,您希望完成的事情似乎是不可能的,但不确定是否有任何类加载器黑客可以解决问题。

标签: java process jar inter-process-communicat


【解决方案1】:

这里有一种方法可以实现:

  1. 从收到的byte [] 创建一个ByteArrayInputStream
  2. 现在使用JarInputStream 创建 jar 文件的内存表示。

    ByteArrayInputStream bis = new ByteArrayInputStream(byteArray); JarInputStream jis = new JarInputStream(bis);

  3. 这样,您就可以将 jar 加载到内存中。

  4. 现在您可以使用自定义类加载器来进一步处理它。这里是one example,你可以参考。

【讨论】:

    【解决方案2】:

    最简单的方法是将其写入 ramdisk 并完全避免内存中的想法。

    【讨论】:

    • +1 您可以使用自定义类加载器来执行此操作,但这比写入文件要困难 100 倍。
    • 你不能在 Java 中做到这一点,除非你有大量的安全权限来做一些事情,比如编辑系统挂载点。在 linux 中,您可以通过执行外部脚本来做到这一点,但理想情况下,您可以通过服务器的引导脚本来设置它。我在 ubuntu 中使用此链接 kevingunn.org/?p=210 执行此操作。
    猜你喜欢
    • 2016-07-20
    • 2015-06-17
    • 2012-06-21
    • 2014-10-02
    • 2014-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多