2012-02-17 4 views
3

私は、作成中のJavaプログラムを使用してファイルや更新を転送する必要のある、異機種のオペレーティングシステムを備えた地理的に離れたノードを持っています。現在、ファイルが変更された場合は、ファイル全体を再度送信する必要があります。異なるファイルのセクションを特定し、それらのファイルのみを送信する方法はありますか(これらのファイルは必ずしもテキストではなく、どの形式でもかまいません)。私が考えることができる唯一の方法は、ファイルをブロックに分割し、ブロックをハッシュし、ハッシュをリクエスタに送り返します。リクエスタは、必要なブロックだけを要求しますが、小さなブロックと大きなファイルに対しては、私のファイルを記述するメッセージを送信して、送信する必要のあるブロックのリストを提供するために特異なメッセージを分析できるようにします。メッセージダイジェストのようなものですが、ファイルが徐々に記述されています

ほとんどのダイジェスト関数は、データの小さな変更がハッシュ出力全体に大きな変化をもたらすように設計されています。基本的にこれとは逆に、すべてのオペレーティングシステムで動作します。

答えて

3

質問が正しく分かっている場合は、2つのシステムでファイルを同期させておく必要があります。 rsyncというツールがあり、ファイルに加えられた変更のみを送信することで2つのファイル(またはディレクトリ全体)を同期させることができます。

また、Rsync algorithmに興味があります。

+0

rsyncも同様に気になった最初のものでした。 Javaラッパーもあります(既存のものはお勧めしませんが)。 – Perception

+0

私のカスタム通信プロトコルを使用する必要があるので、とにかく既存のライブラリを完全に使用することはできませんでした。このアルゴリズムは、私のシステムを最適化するために必要なもののように見えます。 – feldoh

関連する問題