2012-01-23 2 views
0

Как правило, приложение Java запускается с начальным аргументом - путь к .jar или .class.Запуск приложения Java из ОЗУ

Но как запустить Java, если мой файл в памяти?

Если эти методы не существует, может, возможно, скомпилировать Java с аргументом

byte[] FileFromMemory 

или

bufferedreader FileFromMemory 

Я пытаюсь запустить из С ++ приложения

+0

У вас есть только источник файла Java или фактический байтовый код файла класса? –

+0

Оба: исходный и байтовый код файла класса. И у меня есть немного опыта с использованием загрузчика классов для обнаружения класса: if (classloader.getResource («my.class»)! = Null) – user1164554

ответ

5

Для этого вы можете написать загрузчик классов для классов или загрузить класс в существующий загрузчик классов с использованием отражения. Оба подхода считаются очень продвинутыми темами, поэтому я бы пересмотрел это, если у вас много лет опыта Java.

Простейшим решением является запись файла на диск, например. Ramdisk вроде tmpfs Это более простой (если менее эффективный) способ сделать это.

+0

(+1) для рекомендации пересмотреть. – NPE

+0

Ramdisk меня не устраивает. Java-файл, хранящийся на диске. Но мне нужно сохранить его и передать зашифрованным и дешифровать до запуска. И запуск без сохранения расшифровки на диске. – user1164554

+0

В этом случае пользовательский ClassLoader - это то, что вам нужно. Вам необходимо переопределить findClass для выполнения поиска и определения классов по мере необходимости. В качестве примера рассмотрим источник URLClassLoader. –

2

Если ваш код (.jar/.class) находится в ОЗУ, а не в файловой системе, вам необходимо предоставить свой собственный class loader.