代码之家  ›  专栏  ›  技术社区  ›  markovuksanovic

使用Java传输文件

  •  0
  • markovuksanovic  · 技术社区  · 14 年前

    我需要在我的Java程序中把许多小文件传送到远程计算机。我想知道是否有人能建议最好的方法…我需要转车 很多小文件 它必须非常快。我应该使用一些现有的协议实现吗?可能是ftp?

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

    5 回复  |  直到 14 年前
        1
  •  3
  •   Michael Borgwardt    14 年前

    根据你的描述, rsync 是一个绝对完美的适合您的要求,远远优于已提供的替代方案。

        2
  •  1
  •   Eedoh    14 年前

    您对压缩这些文件然后使用ftp有什么看法?你有没有可能在接收端减压?

    Git是版本控制系统,如果您以后不签出这些文件,就不需要在这些文件之上添加Git的文件。我宁愿用ftp。

    这是一个不错的 article 关于Java FTP库(或者您可以使用系统调用到控制台FTP客户端,但我不喜欢这个想法)

        3
  •  1
  •   mdma    14 年前

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

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

    链接

    1. 阿帕奇VFS
    2. 这个 file systems 支持。
        4
  •  0
  •   ring bearer    14 年前

    谁在接收你发送的文件?另一个应用程序?您可以使用消息传递软件,例如 active MQ

    或 使用Java网络API进行FTP。

    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是一个版本控制系统。

        5
  •  0
  •   Stephen C    14 年前

    传输大量小文件的最有效方法是将其作为归档文件,例如zip或tar。如果您的网络速度相对较慢,那么在传输之前压缩归档文件将产生很大的差异。但是如果网络真的很快,压缩可能会使传输文件的总时间变长。另一个造成巨大差异的因素是文件系统读取和(尤其)创建文件的速度。

    Git协议可以非常快,但它只通过发送已更改的文件,以及(在可能的情况下)发送差异而不是完整的文件来实现这一点。这种方法不能用于常规文件传输。rdist和rsync是较旧的Unix/Linux工具,它们采用与Git和其他版本控制系统相同的(差异)方法来传输文件。他们不会帮助你的原因和吉特不会一样…一般来说。