7

どちらを使うか決める必要があります。私のケースはかなり単純です。単純な POJO/Bean を XML に変換してから戻す必要があります。特にない。

私が探していることの 1 つは、親プロパティも含める必要があることです。単なるマーカー インターフェイスであるスーパー タイプで動作する場合に最適です。

誰かがこれらの 2 つを短所と長所と比較して、どれがどれに欠けているかを教えてください。XStreamが JSON もサポートしていることは知っています。これはプラスです。しかし、JSON を脇に置くと、Simpleは一見シンプルに見えます。開発とコミュニティの観点から、Simple の将来はどうなりますか? XStream は非常に人気があり、「XStream」という言葉でさえ、SO で多くのスレッドにヒットしたと思います。

ありがとう。

4

9 に答える 9

11

ドキュメントを読むだけで(私はあなたと同じ問題に直面していますが、まだどちらの方法も試していません。これを一粒の塩で取ってください):

Xストリーム

  1. 非常に簡単に Google にアクセスできます。それに関する例、フォーラムの投稿、ブログの投稿は簡単に見つけることができます。
  2. すぐに使用できます。(もちろん、さらに微調整が必​​要になる場合がありますが、すぐに何かが得られます。)
  3. 変数を属性に変換するには、別個のコンバーター クラスを作成し、それを XStream に登録する必要があります。(単純な値の場合は難しくありませんが、少し余分な作業です。)
  4. XMT (別のライブラリ) を追加しない限り、バージョン管理はまったく処理されません。クラスによって生成された XML が変更された場合、まったく逆シリアル化されません。(XMT を追加したら、クラスを好きなように変更し、増分バージョニング関数のラインを増やして作成する限り、XStream で適切に処理できます。)
  5. すべての調整では、コードを記述して独自の (逆) シリアル化関数を実装するか、XStream 関数を呼び出して使用する (逆) シリアル化手法を変更する必要があります。
  6. 単純な構文の注意: デシリアライザーの出力をクラスにキャストする必要があります。

単純

  1. ホームページは信頼できる唯一の情報源です。半ダースほどの外部記事が掲載されており、メーリング リストもありますが、野生のインターネットでは見つけることができません。
  2. 機能する前にコードに注釈を付ける必要があります。
  3. 各プロパティの XML ノードではなく属性を使用して、よりコンパクトな XML ファイルを簡単に作成できます。
  4. クラスが正しいが、バージョンが異なる場合は常に解析を非厳密にすることでバージョン管理を処理します。(つまり、最後のバージョン以降に 2 つのフィールドを追加して 1 つを削除した場合、削除されたフィールドは無視され、例外はスローされませんが、追加されたフィールドは設定されません。) XStream と同様に、あるバージョンから次のバージョンにデータを移行する方法ですが、XStream とは異なり、介入して処理する外部ライブラリはありません。おそらく、これを処理する方法は、いくつかの外部関数(およびおそらくクラスの「バージョン」変数)を使用することです。

    Stuff myRestoredStuff = serializer.read(Stuff.class, file); myRestoredStuff.sanityCheck();

  5. 一般的に使用される (デ) シリアル化の調整は、注釈を追加/編集することによって行われますが、独自の (デ) シリアル化関数を記述して、何か面倒なことをする必要がある場合に標準メソッドをオーバーライドすることもサポートされています。

  6. 簡単な構文の注意: 復元されたオブジェクトのクラスをデシリアライザーに渡す必要があります (ただし、結果をキャストする必要はありません)。
于 2010-04-28T06:45:33.887 に答える
8

代わりに JAXB を使用しないのはなぜですか?

  • 100% のスキーマ カバレッジ
  • 巨大なユーザーベース
  • 複数の実装 (1 つのバグに遭遇した場合)
  • Java SE 6 に含まれ、JDK 1.5 と互換性があります
  • JAX-WS (Web サービス) のバインディング層
  • JAX-RS のバインディング レイヤー (Rest)
  • JSON との互換性 (Jettison などのライブラリで使用する場合)

役立つリソース:

于 2010-07-09T19:02:18.420 に答える
7

Simpleをご覧になることをお勧めします。

于 2009-10-13T03:52:27.117 に答える
2

また、 Simpleをお勧めします。そこにあるチュートリアルを見て、自分で決めてください。メーリング リストは非常に反応がよく、質問に対しては常に迅速な回答が得られます。

于 2009-10-14T09:55:20.100 に答える
1

これまでのところ、Simple フレームワークはまだ使用したことがありません。

Xstream での私の経験に基づいています。XMLでうまくいきました。ただし、JSON の場合、ハッシュテーブルのリストを含む Bean をシリアル化しようとすると、結果は期待したほど正確ではありません。

于 2009-11-24T10:29:22.150 に答える
1

ここでこれを共有すると思いました。XStream で不足しているフィールドを無視するには (プロパティを削除した場合):

 XStream xstream = new XStream() {
  @Override
  protected MapperWrapper wrapMapper(MapperWrapper next) {
    return new MapperWrapper(next) {
      @Override
      public boolean shouldSerializeMember(Class definedIn,
              String fieldName) {
        if (definedIn == Object.class) {
          return false;
        }
        return super.shouldSerializeMember(definedIn, fieldName);
      }
    };
  }
};   

これは、バージョンとプロパティの名前変更を処理するように拡張することもできます。

Peter Voss の功績: https://pvoss.wordpress.com/2009/01/08/xstream

于 2012-07-12T06:46:33.627 に答える
1

Simple と Jaxb の "単純な" (しゃれを意図した) 欠点の 1 つは、オブジェクトを XML にシリアル化する前に、オブジェクトに注釈を付ける必要があることです。注釈が付けられていないオブジェクトを含む他の誰かのコードをすぐにシリアライズしたい日はどうなりますか? いつかそれが起こるのを見ることができれば、XStream の方が適しています。(場合によっては、決定を下すために、このような単純な要件に要約されることもあります)。

于 2012-12-27T21:44:43.133 に答える
0

スタックオーバーフローを読みながらシンプルをざっと見ていました。Paul Marshall の有益な投稿の修正として、Simple は注釈によるバージョン管理をサポートしているようだと言及したいと思います-

http://simple.sourceforge.net/download/stream/doc/tutorial/tutorial.php#version

于 2010-07-07T10:31:35.367 に答える
0

Simple は XStream よりもはるかに遅い (オブジェクトを xml にシリアル化する場合)

http://pronicles.blogspot.com/2011/03/xstream-vs-simple.html

于 2011-03-17T07:17:04.277 に答える