0

XML要素を表すいくつかのJavaオブジェクトに取り組んでいます。私が現在使用している標準は少し扱いに​​くいものになる可能性があるため、(。xsdから直接生成された)多数のJAXBオブジェクトを使用してコンポジションを設計し、使いやすさのために追加機能を提供しています。

私がJavaで表現しているオブジェクトは実際のXMLオブジェクトなので、それらをXMLにシリアル化するのは適切でしょうか?そうでない場合、なぜこれは(パフォーマンス上の理由を除いて)悪い考えになるのでしょうか?

編集:

「なぜこれをやりたいのか」という言葉がたくさん出てきます。質問を入力するので、少し説明させてください。オブジェクトの論理的な実装がその物理的な実装と大きく異なる場合(BlochのEffective Java、アイテム75から)、カスタムのシリアル化されたフォームを検討することが適切な場合がよくあります。私の場合、物理形式は論理形式とは大幅に異なり、カスタムシリアル表現が適切です。オブジェクトは常にXMLで表現できるので、論理的には適切に思えますが、これがJava言語(IEのパフォーマンス)に与える影響を理解しようとしています。

4

4 に答える 4

1

私はこれが愚かな考えだとは思わない。xml表現には、バイナリ担当者が必要とするスペースの約100倍のスペースが必要になる可能性があります。xml docシリアル化を使用する前に、javastdシリアル化を使用します。(これは快適ですが効率的ではありません)

より適しているのは、バイナリxml表現です。JSonやGoogleprotobufのBSONのように。バイナリXMLを探します。

于 2013-02-19T13:39:04.973 に答える
0

私がJavaで表現しているオブジェクトは実際のXMLオブジェクトなので、それらをXMLにシリアル化するのは適切でしょうか?

私はあなたがDOMのようなものを意味すると思います。次に、XMLバインディングを使用してシリアル化します...DOMオブジェクトをPOJOとして扱います!!

悪い考え、IMO。

そうでない場合、なぜこれは(パフォーマンス上の理由を除いて)悪い考えになるのでしょうか?

  • シリアル化と逆シリアル化のパフォーマンスが低下します。
  • シリアル化されたフォームは肥大化します。
  • 生成されたXMLは読み取り不能になります。
  • シリアル化は、他のものが処理するのが困難になります。XSLT変換を試してみることを検討してください。イベントベースのパーサーを使用して処理することを検討してください。

実際、私はこれが良い考えかもしれないという理由を考えるのに苦労しています。


アップデート

なぜこれを行うのが納得できないのかについてのあなたの説明(あなたの更新/コメントで):

オブジェクトの論理的な実装がその物理的な実装と大きく異なる場合(BlochのEffective Java、アイテム75から)、カスタムのシリアル化されたフォームを検討することが適切な場合がよくあります。

Blochのアドバイスは、カスタム表現の使用を検討することです。そして、その中に暗黙のうちに、あなたが目の前にある標準的な表現よりも優れたカスタム表現を検討するという仮定があります。

私の場合、物理形式は論理形式とは大幅に異なり、カスタムシリアル表現が適切です。

そもそも、XMLでDOMを表現したい理由は説明されていません。または、なぜそれが優れていると思うのか。

オブジェクトは常にXMLで表現できるため、論理的には適切なようです...

あなたはその論理を説明していません。

...しかし、私はこれがJava言語(IEのパフォーマンス)に与える影響を理解しようとしています。

さて、その意味は私が上で説明した通りです。そして、これについてJava固有のものは何もありません。


OK、これを別の観点から見てみましょう。

  1. あなたはいくつかの情報を持っています。
  2. その情報をXMLで表します。
  3. XMLを解析して、メモリ内の表現(DOM)を取得します。
  4. jaxbのようなものを適用して、DOMのXML表現を提供します...POJOSとして表示されます
  5. DOMをシリアル化します。

最終的には、元の情報を表すXMLを表すJavaオブジェクトのXML表現になります。

これは、元の情報のXML表現よりもどのように優れていますか?

さて、おそらく、ステップ3でjaxbを使用し、カスタムJavaクラスに逆シリアル化した場合、それらのJavaクラスをシリアル化するのは理にかなっています。ただし、「XML要素を表すJavaオブジェクト」はありません。むしろ、元のXMLで表された情報を表すJavaオブジェクトがあります。

それはあなたが実際にあなたの質問に書いたものとは完全に異なるものです。そしてそれがあなたの意図することであるならば、それは人々があなたを理解しなかった理由を説明します...そしてあなたが実際に言っていることはほとんど/意味がないと思いました。

于 2013-02-19T13:40:31.760 に答える
0

XMLファイルにシリアル化するという意味ですか?一般的な意見では、これはパフォーマンス上の理由から良い考えではありませんが、これらのオブジェクト/ xmlファイルを別のシステムへのフィードとして使用する意図がある場合は、検討する価値があるかもしれません。

于 2013-02-19T13:42:37.297 に答える
0

XSDで定義されたルールに対してオブジェクトを検証できることが主な関心事である場合、これはそれがどのように機能するかへのリンクです。これを考えると、オブジェクトをXMLにマーシャリングすると、数サイクルかかることに注意してください。重要なパフォーマンスへの影響の1つは、オブジェクトのマーシャリングに使用するJAXBコンテキストの作成です。ある種のシングルトンオブジェクト(POJO、Spring Beanなど)でJAXBコンテキストを作成することで、このパフォーマンスへの影響を最小限に抑えることができるため、毎回再作成されることはありません。

于 2013-02-19T14:12:46.937 に答える