0

Javaプログラム内のリモートコンピュータにたくさんの小さなファイルを転送する必要があります。誰かがそうするための最良の方法を提案できるかどうか疑問に思っていました...私はたくさんの小さなファイルを転送する必要があり、それは本当に高速でなければなりません。既存のプロトコル実装を使用する必要がありますか?多分ftp?

重要なことの1つは、ほとんどのファイルが常に同じであるか、違いが小さいことです。そのため、その目的でgitを使用することを考えていました。誰かがこのようなsthの経験がありますか?

4

5 に答える 5

3

あなたの説明から、rsyncはあなたの要件に完全に適合し、提供されている代替手段よりもはるかに優れています。

于 2010-04-27T20:33:14.680 に答える
0

これらのファイルを圧縮してからftpを使用することについてどう思いますか?受信機側で解凍する可能性はありますか?

Gitはバージョン管理システムであり、後でファイルをチェックアウトしない場合は、それらのファイルの上にgitのファイルを追加する必要はありません。私はむしろftpを使いたいです。

これは、Java ftpライブラリに関するすばらしい記事です(または、コンソールftpクライアントへのシステムコールを使用できますが、このアイデアは好きではありません)

于 2010-04-27T15:48:23.363 に答える
0

送信したファイルを誰が受信していますか?別のアプリケーション?アクティブMQなどのメッセージングソフトウェアを使用できます

またはFTP用のJavaネットAPIを使用します。

URL url = new URL("ftp://user:password@server/filename;type=i");
URLConnection urlc = url.openConnection();
InputStream is = urlc.getInputStream(); // To download
OutputStream os = urlc.getOutputStream(); // To upload

なぜgitを使いたいのか疑問に思います。デルタなどを見つけるためのAPIを提供していますか?私はそうは思わない。私の知る限り、gitはバージョン管理システムです。

于 2010-04-27T15:53:31.017 に答える
0

たくさんの小さなファイルを転送する最も効率的な方法は、アーカイブとしてです。例:ZIPまたはTAR。ネットワークが比較的遅い場合は、送信前にアーカイブを圧縮すると、ファイルに大きな違いが生じます。ただし、ネットワークが非常に高速である場合、圧縮によってファイルの転送にかかる合計時間が実際に長くなる可能性があります。大きな違いを生むもう1つの要因は、ファイルシステムがファイルを読み取って(特に)作成できる速度です。

Gitプロトコルは非常に高速ですが、変更されたファイルのみを送信し、(可能な場合は)完全なファイルではなく差分を送信することでこれを実現します。このアプローチは、通常のファイル転送には使用できません。Rdistとrsyncは、Gitや他のバージョン管理システムと同じ(異なる)アプローチでファイルを転送する古いUNIX/Linuxツールです。Gitが役に立たないのと同じ理由で彼らはあなたを助けません...一般的に。

于 2010-04-27T16:09:27.307 に答える
0

Apache VFSプロジェクトは、プログラムからファイルシステム間でファイルをコピーするために使用できるJavaライブラリです(たとえば、ローカルファイルをFTP / SCP / HTTPにコピーします)。

コピー先よりも新しいソース内のファイルのみがコピーされるようにコピーを構成して、送信されるデータの量を減らすことができます。

リンク

  1. Apache VFS
  2. サポートされているファイルシステム
于 2010-04-27T20:25:59.757 に答える