2011-01-18 8 views
0

javaインスタンスからネットワークを介して別のインスタンスにメッセージ(シリアル化可能オブジェクト)を送信します。私はオブジェクト全体が正しく送信されていることを確認したいと思います。オブジェクトの転送が完了したことを確認する方法

私の最初のステップは、オブジェクトのチェックサムを計算することです。次に、そのチェックサムをオブジェクトに含めるか、メッセージとそのチェックサムのコンテナオブジェクトを作成します。

次に、私の2番目のステップは、反対側のオブジェクトに対してチェックサムを検証することです。受信機は、当該オブジェクトが受信されたこととチェックサムが合格(またはしない)を有しているという確認メッセージを送信するため

私の第3のステップは、あろう。私がチェックサムに失敗したという警告を受け取った場合、私はそれを数回再送しようとします。私は確認を受けたことがない場合

しばらくした後、私は同様にそれを数回再送信してみてください。

質問:

は私のプロトコルは、オブジェクトが正しく転送されたことを確認する権利を鳴らしていますか?

私はこれをjavaでどのように実装するのでしょうか。 CRC32クラスを使用してチェックサムを生成しますか?

ボーナス質問:私は、各メッセージを圧縮した場合、私は圧縮後の前のチェックサムを生成しない、そしてどのように私はJavaでオブジェクトを圧縮していますか?

答えて

2

エラー率の低い信頼性の高いネットワークがある場合は、チェックサムを追加する必要はありません。まず、チェックサムなしでプロトコルを実装し、必要があると思ったら追加します。

DeflatorOutputStream、InflatorInputStreamでデータを圧縮できます。圧縮されたデータが破損している場合、オブジェクトをアンパックする際に例外がスローされる可能性が高くなります。すなわち、微妙なエラーを生じる可能性は非常に低い。あなたのオブジェクトが大きい場合を除き

しかし、彼らは非常によく圧縮しない場合があり、圧縮と大きいendupことができます。

1

圧縮のために、私は、Apacheジップユーティリティをお勧めしたいと思います: http://commons.apache.org/compress/apidocs/org/apache/commons/compress/archivers/zip/package-summary.html

あなたは、あなたがチェックサムをスキップすることができ、圧縮されている場合。圧縮アルゴリズムはデータの破損に非常に敏感です。オブジェクトが反対側で解凍に失敗した場合、送信中に情報が失われます。

+2

なぜApacheのZIPユーティリティ? JDKにはクラスも含まれています。 – Mot

0

私はあなたの手順に同意します(これは私がやっていることです、ObjectIOストリームを超えています)。 - [1]入ってくるものをObjectとして読み込み、 "instanceof"でそのクラスを見つけてください。それはに来ているものをデバッグするために期待されるクラス、時間ではない場合。

いくつかの他の状況では、私はまた、次の到着するオブジェクトの内容に関する情報を含む文字列を送信します。この文字列を解析し、オブジェクトを読み取る、それは文字列内の情報は、言っていることを確認し、確認を書き出し、それを型キャスト:)