Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 执行内存中的jar_Java_Process_Jar_Inter Process Communicat - Fatal编程技术网

Java 执行内存中的jar

Java 执行内存中的jar,java,process,jar,inter-process-communicat,Java,Process,Jar,Inter Process Communicat,假设我有一个java进程正在以字节[]的形式从受信任的进程接收一个可运行的jar文件,有没有一种方法可以调用它而不必将jar文件写入磁盘,然后调用它(启动一个运行jar的新进程)最简单的方法是将其写入ramdisk并完全避免内存中的想法。以下是一种实现方法: 从接收到的字节[]创建ByteArrayInputStream 现在使用创建jar文件的内存表示形式 ByteArrayInputStream bis=新的ByteArrayInputStream(byteArray); JarInputS

假设我有一个java进程正在以字节[]的形式从受信任的进程接收一个可运行的jar文件,有没有一种方法可以调用它而不必将jar文件写入磁盘,然后调用它(启动一个运行jar的新进程)最简单的方法是将其写入ramdisk并完全避免内存中的想法。

以下是一种实现方法:

  • 从接收到的
    字节[]
    创建
    ByteArrayInputStream
  • 现在使用创建jar文件的内存表示形式

    ByteArrayInputStream bis=新的ByteArrayInputStream(byteArray);
    JarInputStream jis=新的JarInputStream(bis)

  • 这样,就可以将jar加载到内存中

  • 现在,您可以使用自定义类加载器来进一步处理它。这里是你可以参考的
    任何执行都从类加载器开始,类加载器从
    URL
    加载类文件并进一步处理它。首先,您希望完成的任务似乎不可能完成,但不确定是否有任何类加载器黑客会做到这一点。+1您可以使用自定义类加载器来完成这一任务,但这比写入文件要困难100倍。除非您拥有完整的安全权限来执行诸如编辑系统装载点之类的操作,否则您无法在Java中完成这一任务。在linux中,您可以通过执行外部脚本来实现这一点,但理想情况下,您可以通过服务器的引导脚本来设置它。我在ubuntu中使用了这个链接。