私はJavaのネイティブ直列化が遅いプロジェクトで作業していますので、優れたパフォーマンスを得るためにクラスに対してExternalizeインタフェースを実装します。自動的にJava外部化可能なreadExternal()/ writeExternal()ブロックを生成します。
しかし、これらのクラスには多くのデータメンバーがあり、これらの2つのメソッドを記述する際に間違いを犯すのは簡単です。私たちは、これらの関数でクラスのすべてのメンバーを読み書きしていますが、何も気にしません。オフラインプロセスまたはコンパイル時に自動的に外部化するブロックを writeExternal()
個生成する方法はありますか?
私はhttp://projectlombok.org/を見ましたが、そのようなものは理想的でした。
同様に、私たちはこれらのクラスを不変に保ちたいが、不変クラスは外部化可能なインタフェースを実装できない - 有効なjavaからのプロキシクラスパターンを使いたい。
実行時にリフレクションを使用してシリアル化を行いますが、これは常に遅くなります。異なるシリアル化方法の比較については、http://code.google.com/p/thrift-protobuf-compare/wiki/Benchmarkingをご覧ください。 – MrLebowski
@MrLebowski私はReflectionの使用を認識していますが、実際にはネットワークとディスクの帯域幅を支配していますか?彼らはテストにそれを含めましたか?たとえば、ByteArrayOutputStreamsにシリアル化するだけですか?あなたはこれがすべて完全に学業であることをよく見いだすかもしれません。 – EJP
それを指摘してくれてありがとう。 http://pastebin.com/yi4JhhVb ---外部からのシリアライズに関連した時間の増加がシリアライズ可能になるのは、ちょうど1ms前後です。これはネットワーク時間の悪化です。私は圧縮されたストリームを試して、それが役立つかどうかを見ています。外部化可能な自動化された、または自動化されたシリアライゼーションがさらに最適化されます。 – MrLebowski