通常、Javaアプリケーションは、start引数(.jarまたは.classのパス)で実行されます。RAMからJavaアプリケーションを実行する
しかし、私のファイルがメモリにある場合、Javaを実行するには?
これらのメソッドが存在しない場合は、おそらく引数
byte[] FileFromMemory
または
bufferedreader FileFromMemory
してJavaをコンパイルすることができ、私はあなたの場合はС++アプリケーションから
通常、Javaアプリケーションは、start引数(.jarまたは.classのパス)で実行されます。RAMからJavaアプリケーションを実行する
しかし、私のファイルがメモリにある場合、Javaを実行するには?
これらのメソッドが存在しない場合は、おそらく引数
byte[] FileFromMemory
または
bufferedreader FileFromMemory
してJavaをコンパイルすることができ、私はあなたの場合はС++アプリケーションから
リフレクションを使用してこれを行うか、クラスを既存のクラスローダーにロードするために、顧客クラスローダーを記述することができます。どちらのアプローチも非常に高度なトピックとみなされますので、長年のJavaの経験がなければこれを再考します。
最も簡単な解決策は、ファイルをディスクに書き込むことです。 tmpfs
のようなRamdiskこれはこれを行う方法がより簡単です(それほど効率的でない場合)。
(+1)再考するアドバイス。 – NPE
Ramdiskは私に合っていません。 Javaファイルはディスクに保存されます。しかし、私はそれを保存し、暗号化して送信し、起動する前に解読する必要があります。保存せずに起動し、ディスクに解読します。 – user1164554
この場合、カスタムClassLoaderが必要です。ルックアップを実行し、必要に応じてクラスを定義するには、findClassをオーバーライドする必要があります。例として、URLClassLoaderのソースを見てください。 –
を実行しようとしていますコード(.jar
/.class
)はRAMに存在し、ファイルシステムには存在しませんので、自分でclass loaderを提供する必要があります。
Javaファイルのソース、またはクラスファイルの実際のバイトコードがありますか? –
両方:クラスファイルのソースコードとバイトコード。そして、私はクラス検出のためにクラスローダーを使用することで少し経験があります:if(classloader.getResource( "my.class")!= null) – user1164554