0

ネットワーク経由で Java インスタンスから別のインスタンスにメッセージ (シリアライズ可能なオブジェクト) を送信したいと考えています。オブジェクト全体が正しく送信されたことを確認したいと思います。

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

次に、私の 2 番目のステップは、反対側のオブジェクトに対してチェックサムを検証することです。

私の 3 番目のステップは、問題のオブジェクトが受信され、チェックサムがパスした (またはパスしなかった) ことを示す確認メッセージを受信者が送信することです。チェックサム失敗の警告を受け取った場合は、それを数回再送信しようとします。

しばらくしても確認が取れない場合は、何度か再送信を試みます。

質問:

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

また、Java でこれを実装する方法を知りたいですか? CRC32 クラスを使用してチェックサムを生成する必要がありますか?

おまけの質問: 各メッセージを圧縮する場合、圧縮前と圧縮後のチェックサムを生成する必要がありますか? また、Java でオブジェクトを圧縮するにはどうすればよいですか?

4

3 に答える 3

2

エラー率が低く、かなり信頼できるネットワークを使用している場合は、追加のチェックサムを追加する必要はありません。最初にチェックサムなしでプロトコルを実装し、必要な場合は追加します。

DeflatorOutputStream、InflatorInputStream でデータを圧縮できます。圧縮データが破損している場合、オブジェクトをアンパックするときに例外がスローされる可能性が高くなります。つまり、微妙なエラーが発生する可能性はほとんどありません。

ただし、オブジェクトが大きくない限り、圧縮がうまくいかず、圧縮によってサイズが大きくなる可能性があります。

于 2011-01-18T17:44:38.000 に答える
1

圧縮については、Apache Zipユーティリティをお勧めします:http: //commons.apache.org/compress/apidocs/org/apache/commons/compress/archivers/zip/package-summary.html

圧縮している場合は、チェックサムをスキップできます。圧縮アルゴリズムは、データの損傷に非常に敏感です。オブジェクトがもう一方の端で解凍に失敗した場合は、送信中に一部の情報が失われます。

于 2011-01-18T17:11:54.470 に答える
0

私はあなたのステップに同意します.1つの追加があります(これはObjectIOストリームに対して私が行うことです)-[1]受信したものをオブジェクトとして読み取り、「instanceof」でそのクラスを見つけます。予期されたクラスでない場合は、入ってくるものをデバッグする時間です。

他の状況では、次に到着するオブジェクトのコンテンツに関する情報を含む文字列も送信します。この文字列を解析し、オブジェクトを読み取り、型キャストし、文字列に含まれる情報が含まれていることを確認し、確認を書き出します:)

于 2011-01-19T06:51:17.037 に答える