2009-05-04 12 views
5

私はお互いに話す必要がある2つのアプリケーションがあります。 App1は、App2が逆シリアル化できるオブジェクトをシリアル化できる必要があります。簡単に、そうですか?ここに問題があります。 App1はC#ベース、App2はJavaベースです。したがって、App1はJavaバイナリファイル形式でファイルを書き出す必要があります。これはどうすればできますか?C#を使用してJava逆シリアル化可能オブジェクトをシリアライズ

私はそれを見て、私は2つの選択肢があります。最初は、C#でJavaオブジェクトをシリアライズする何らかの方法を見つけ出し、App1が適切なファイルを作成するようにします。私の他の選択肢は、ファイルを読み込んでそれに応じてオブジェクトを生成し、新しく生成されたオブジェクトを直列化するコンバータをJavaに書くことです。そうすれば、C#アプリケーションは、コンバータが次に解釈する書式付きテキストファイルを書き出すだけで済むでしょう。

Javaアプリケーションを変更することはできません。

これはどのように行う必要がありますか?

更新:

Javaアプリケーションは、そのシリアル化のスキームは、顧客がデータに互換性がないことが、既存の原因となる変更、お客様の手の中に既にあります。 Java Appは、このオブジェクトを扱うときにネイティブのJavaシリアル化を使用します。 Javaアプリケーションの変更は起こりません。

C#アプリケーションは、プロトコルバッファを使用して独自のデータをシリアル化します。

+1

バイナリ形式を使用する必要がありますか? JavaはXMLの直列化をサポートします。 – Steve

+1

私はそれを変更することが許されていないので、はい、バイナリ形式でなければならないと思います。 – mmr

答えて

7

ベスト・アンサーは、オプション3です。 言語に依存しないシリアル化スキームを使用してください。

私はJavaScriptを使用しています。 Thriftはもう一つの選択肢です。プロトコルバッファはRPCにもっと集中していると思われますが、シリアライゼーションにも使用できるはずです。 XMLやカスタムバイナリ形式は他のオプションになります。

編集: 申し訳ありませんが、Javaアプリケーションを変更することはできません。それはおそらく、あなた自身の明確なフォーマットを作成し、そのフォーマットを読むことができるJavaアプリケーションを書いてから、レガシー・アプリケーション用の直列化されたJavaオブジェクトを出力するのが最善の方法でしょう。

+2

多分そうですが、結果は依然としてJavaの形式でなければなりません。問題は、「私はJavaアプリケーションを変更することはできません」と述べています。 –

+0

私は編集ソリューションに同意します。あなたはC#のアプリケーションを制御することができる場合、あなたはちょうどC#からあなたのXMLのシリアル化されたオブジェクトを読んで、Javaネイティブのシリアライズされたファイルを吐き出す小さなJavaプログラムを書くことができます。あなたのC#アプリケーションは、あなたが "エクスポート"する準備ができているとき、またはあなたのプロセスが何であれ、Javaアプリケーションを起動することができます。 – digitaljoel

1

IKVM」が使用できる可能性があります。この製品を使用すると、コンパイルされたJavaバイトコード(.jarなど)を.NET DLLに変換できます。使い方が簡単で、必要な相互運用性を提供する可能性があります。

これ以外にも、バイナリレベルの相互運用機能なしでこれを達成する最も簡単な方法は、CSVやXMLなどのプレーンテキスト形式を使用することです。

1

XMLシリアル化を使用してください。どちらのフレームワークも良好なサポートを持っており、シンプルさはデバッグ/メンテナンスを容易にします。 Javaで、XMLをインポートしてバイナリファイルを書き込む小さなプログラムを作成します。

1

ベストネームは、Javaネイティブインターフェイスを使用するものを書くことです。楽しいことではありませんが、うまくいくでしょう。

あなたは、これが直接JNI(楽しいなんとかしない)を使用して行うことができますまたはあなたのためのコードを生成することがあるいくつかのツールが不足している可能性があり - SWIGを見てみましょう:http://www.swig.org/

あなたは、C#からJavaを呼び出すとあなたのために永続を行うために。

関連する問題