2011-01-24 6 views
4

私は、アプリケーションの他のユーザーとデータを同期させるためにバックエンドサーバーが必要なアンドロイド用のアプリケーションの開発を計画しています。私はUNIXサーバ上で動作する標準のJavaでこのサーバを書くつもりです。DalvikからJava SEへの通信

私はかつてこれを2台のアンドロイドデバイス間で直接行いました。この場合、私は両端で送信する必要があるすべてのデータをシリアライズしました。

しかし、Dalvikがシリアル化する形式とJava SEの形式は互換性がないと思われます。これは本当ですか?それがあれば、私の選択肢は何ですか?私の心に突き刺されたことの一つは、ソケット上に生のXMLを送ることでしたが、より良い選択肢があれば、私はそれらを聞いてうれしく思います。

ありがとうございました。

答えて

6

サーバーをやっているなら、あなたすべきXMLやJSONのような標準に頼っています。私は個人的にJSONを好む。すべてのクライアントがJavaに優しいと期待するべきではありません。ほぼすべてのモバイルデバイスがJSONをサポートしています。 Jacksonライブラリを見てjsonを生成してください。次に、ジャクソンを使ってオブジェクトを逆シリアル化することができます。

このソリューションの美しさも、簡単で愚かです。ブラウザにリクエストを入れるだけでコンテンツを見ることができます。バイナリデータではそれほど簡単ではありません。

+0

本当に最適なオプションのようです。私はそれを試して、それがどのように行くか見る。ありがとう。 – monoceres

+0

ようこそ。 Jackson ObjectMapperを見てください。シリアライズとデシリアライズを行うことができます。 JavaのネイティブObjectInput/OutputStreamを使用するよりも高速です。このソリューションを使用して、後でiPhoneや他のモバイルアプリケーションを作成することもできます。最後に、RESTful Webサービスの作成に役立つJeresy(http://en.wikipedia.org/wiki/JAX-RS)を見てください。 –

0

プロトコルバッファは、配線上で考慮すべき適切なフォーマットです。

私はDalvikのシリアル化について話すことはできません。

2

protobufをシリアル化してみてください。より効率的であると言われており、互換性について心配する必要はありません。

また(JAXB、XStreamの、XMLEncoder、など)

それは互換性があることをthis questionヒントの解像度をXMLシリアル化のいくつかのフォームを使用することができます。

1

あなたのオブジェクトグラフが非常にシンプルで、JSONに慣れていれば、AndroidにはJSON supportが含まれており、Java SEでのサポートを簡単に得ることができます。私はJSONをXMLやJavaのシリアライゼーションが「重い」と思われるときの良い選択肢と考える傾向があります。

3

私は、Androidデバイスとサーバーの間でデータのシリアル化を成功させました。

私は特にTimeZoneクラスが完全に互換性がないため(これは、Android上でClassNotFoundExceptionを得sun.パッケージで何かを転送しようとした)文字列にバックTimeZoneクラスを変換する必要がありました。

など 私は java.lang種類 String java.utilコレクションやマップからと java.sqlデータ型から、そしてもちろんオブジェクトを転送することができましたそれ以外

Integer ..

+0

特定のシリアライゼーションバグがある場合は、http://code.google.com/p/android/issues/entryに報告してください(具体的には、ここで言及した特定のケースでは、私たちのものではなくSunのバグのようです)。 TimeZoneのシリアライズされたフォームはString OlsonのIDであるはずです。 –

1

thisベンチマークをご覧ください。 Kryoは私が使っているものです。 DalvikとJSEの両方に適した方法で行うことができる、カスタムバイナリシリアル化の作成をサポートしています。

related質問をご覧になると、追加のディスカッションやリンクが表示されます。

関連する問題