使用java传输文件

时间:2010-04-27 15:42:19

标签: java git data-transfer file-transfer

我需要在我的java程序中将大量小文件传输到远程计算机。我想知道是否有人可以建议最佳方式...我需要传输许多小文件并且它必须非常快。我应该使用一些现有的协议实现吗?也许是ftp?

一个重要的事情是,大多数文件始终是相同的,或者差别很小,所以我考虑使用git来达到这个目的。有没有人有这样的经历?

5 个答案:

答案 0 :(得分:3)

根据您的描述,rsync绝对适合您的要求,远远优于已提供的替代品。

答案 1 :(得分:0)

您对压缩这些文件然后使用ftp感觉如何?你有可能在接收方那边减压吗?

Git是版本控制系统,如果您以后不查看文件,则无需在您的文件之上添加git文件。我宁愿使用ftp。

这是关于java ftp库的一个很好的article(或者你可以使用系统调用到控制台ftp客户端,但我不喜欢这个想法)

答案 2 :(得分:0)

谁在接收您发送的文件?另一个申请?您可以使用active MQ

等消息传递软件

或 坚持使用FTP的java net 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来查找delta等?我不这么认为。据我所知,git是一个版本控制系统。

答案 3 :(得分:0)

传输大量小文件的最有效方法是存档;例如ZIP或TAR。如果您的网络速度相对较慢,则在传输之前压缩存档会使文件产生很大差异。但是,如果网络真的很快,压缩实际上可能会使传输文件的总时间更长。另一个产生重大影响的因素是文件系统可以读取的速率和(特别是)创建文件的速率。

Git协议可以非常快,但它只通过发送已更改的文件和(如果可能)发送差异而不是完整文件来实现。此方法不能用于常规文件传输。 Rdist和rsync是较旧的UNIX / Linux工具,采用与Git和其他版本控制系统相同的(差异)方法来传输文件。他们不会帮助你,原因与Git一般不会有相同的原因。

答案 4 :(得分:0)

Apache VFS项目是一个java库,您可以在程序中使用它来在文件系统之间复制文件。(例如,将本地文件复制到FTP / SCP / HTTP。)

可以配置复制,以便只复制源中比目标更新的文件,从而减少发送的数据量。

链接

  1. Apache VFS
  2. 支持file systems