我需要在我的 java 程序中将大量小文件传输到远程计算机。我想知道是否有人可以建议这样做的最佳方法...我需要传输大量小文件,而且速度必须非常快。我应该使用一些现有的协议实现吗?也许是ftp?
一件重要的事情是大多数文件一直都是相同的,或者差异很小,所以我正在考虑使用 git 来达到这个目的。有没有人有这样的经验?
我需要在我的 java 程序中将大量小文件传输到远程计算机。我想知道是否有人可以建议这样做的最佳方法...我需要传输大量小文件,而且速度必须非常快。我应该使用一些现有的协议实现吗?也许是ftp?
一件重要的事情是大多数文件一直都是相同的,或者差异很小,所以我正在考虑使用 git 来达到这个目的。有没有人有这样的经验?
根据您的描述,rsync绝对适合您的要求,远优于已提供的替代方案。
传输大量小文件的最有效方式是存档;例如 ZIP 或 TAR。如果您的网络相对较慢,则在传输之前压缩存档将对文件产生很大影响。但如果网络真的很快,压缩实际上可能会使传输文件的总时间变长。另一个影响很大的因素是文件系统可以读取和(尤其是)创建文件的速率。
Git 协议可以非常快,但它通过仅发送已更改的文件以及(在可能的情况下)发送差异而不是完整文件来实现这一点。此方法不能用于常规文件传输。Rdist 和 rsync 是较旧的 UNIX / Linux 工具,它们采用与 Git 和其他版本控制系统相同的(差异)方法来传输文件。它们不会帮助你,原因与 Git 不会......一般来说。
Apache VFS项目是一个 java 库,您可以从程序中使用它在文件系统之间复制文件。(例如,将本地文件复制到 FTP/SCP/HTTP。)
可以配置复制,以便仅复制源中比目标新的文件,从而减少发送的数据量。
链接
你对压缩这些文件然后使用 ftp 感觉如何?你有可能在接收方解压吗?
Git 是版本控制系统,如果以后不签出文件,则无需在您的文件之上添加 git 文件。我宁愿使用ftp。
这是一篇关于 java ftp 库的好文章(或者您可以使用对控制台 ftp 客户端的系统调用,但我不喜欢这个想法)
谁在接收您发送的文件?另一个应用程序?您可以使用消息传递软件,例如活动 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 是一个版本控制系统。