1

ソケットを介して TCP 経由でいくつかのレコードを転送する必要があります。と を使用ObjectInputStreamObjectOutputStreamましたが、うまくいきました。重要な考え方の 1 つは、ソケットが一度開かれ、通信全体を通して開いたままにしておく必要がありますが、両側で複数回読み取りと書き込みを行うことです (つまり、永続的な接続に似ています)。

全体的なパフォーマンスを向上させるために、オブジェクトを書き込む前にオブジェクトを圧縮しようとしましたが、結果は非常に有望でしたが、 と を使用GZIPOutputStreamByteArrayOutputStreamたため、メモリ オーバーヘッドが大きすぎ、場合によっては OutOfMemory エラーが発生します。

試してみDeflaterOutputStreamましたが、オブジェクトの書き込みには適していないようでした。この問題を解決する方法はありますか?

4

1 に答える 1

4

Javaのシリアル化は便利ですが、サイズ的にもCPU使用率においても効果がありません。高性能が必要な場合は、たとえばプロトコルバッファなどの軽量なものに基づいて、まったく異なる通信プロトコルを使用することをお勧めします。

于 2012-06-08T14:29:54.317 に答える