Предположим, у меня есть процесс Java, который получает исполняемый jar-файл от доверенного процесса в виде байта [], есть ли способ вызвать его без необходимости записи jar-файла на диск, а затем вызвать его (запустить новый процесс, который запускает банку)?
Выполнение банки памяти
Ответы (2)
Вот один из способов, которым вы можете это сделать:
- Создайте
ByteArrayInputStream
из полученныхbyte []
. Теперь используйте
JarInputStream
для создания в памяти представления файл jar.ByteArrayInputStream bis = new ByteArrayInputStream(byteArray); JarInputStream jis = new JarInputStream(bis);
Таким образом, вы загрузите банку в память.
- Теперь вы можете использовать пользовательские загрузчики классов для дальнейшей обработки. Вот один пример, к которому вы можете обратиться.
person
Santosh
schedule
04.09.2012
Самый простой подход — записать его на виртуальный диск и полностью отказаться от идеи в памяти.
person
Adam
schedule
04.09.2012
+1 Для этого вы можете использовать пользовательские загрузчики классов, но это в 100 раз сложнее, чем запись в файл.
- person Peter Lawrey; 04.09.2012
Вы не можете сделать это в Java, если у вас нет полного набора разрешений безопасности для таких вещей, как редактирование точек монтирования системы. В Linux вы могли бы сделать это, выполнив внешний сценарий, но в идеале вы должны настроить его с помощью сценариев загрузки вашего сервера. Я использовал эту ссылку kevingunn.org/?p=210, чтобы сделать это в Ubuntu.
- person Adam; 04.09.2012
URL
и далее обрабатывают их. Во-первых, то, что вы хотите выполнить, кажется невозможным, но не уверен, что какой-либо взлом загрузчика классов поможет. - person Santosh   schedule 04.09.2012