2012-01-15 6 views
1

ネットワーク経由でクラスデータを送信したいので、クラス名から.classファイルのバイナリデータを取得する必要があります。私は、デフォルトのクラスローダーを使用して、ネットワーク経由でロードされたデータを送信したいと思います。これどうやってするの?私はscala 2.9.0.1とjre6を使用していますクラス[_]オブジェクトからバイナリデータを取得するにはどうすればよいですか?

+0

クラスのインスタンス内のデータを、クラス自体のバイトコードと一緒に送信しますか? –

+0

私はスカラのリモートアクタを使用しています。接続が設定された後、私は自分のクラスのインスタンスをサーバーからクライアントに送信します。また、デシリアライズ中にクラス定義が見つからない場合は、そのクラスの定義をサーバーに送信します。そして、問題はここにあります。サーバがjarファイルにパッケージ化されている場合、返信するものはわかりません。 – laci37

答えて

4

RMIではネットワークからクラスファイルをロードできます。これはおそらくあなた自身のソリューションを動かすよりも簡単です。 http://docs.oracle.com/javase/6/docs/technotes/guides/rmi/codebase.html

+0

.classファイルへのパスが分かっていれば、すべてがセットアップされ、動作しています。しかし、jarファイルにパッケージ化したいのであれば、クラスファイルへのパスを判断できないので失敗します。 – laci37

1

完全修飾クラス名のピリオドをファイル区切り文字に置き換え、結果に ".class"を追加します。これはクラスパス内の.classファイルの場所になります。その後、ClassLoaderを使用してストリームとしてファイルにアクセスします。

val location = className.replaceAll("\\.",File.separator) + ".class" 
val stream = ClassLoader.getSystemClassLoader().getResourceAsStream(location) 
//send the stream to your remote location 
+0

これはjarファイルでは動作しないようです。 – laci37

+0

jarかどうかにかかわらず、クラスパス内の何かを拾う必要があります。あなたが問題を抱えているなら、あなたが使用しているClassLoaderが問題になる可能性が高いと思います。 MyClassという名前のクラスでこれを試していた場合は、次のように試してみてください:MyClass.class.getClassLoader()。getResourceAsStream(....) –

関連する問題