JSch ChannelSftp.put 方法恢复模式

JSch ChannelSftp.put method RESUME mode

我对 JSch 的 ChannelSftp.put() 方法的 RESUME 模式有疑问。

传输文件时,如果服务器上已存在同名但修改日期和大小不同(大于现有文件)的文件,即文件的新版本,我 运行 put()使用 RESUME 模式的方法然后它将两个文件之间的字节差异添加到服务器上现有的文件或覆盖文件。

  • 如果目标远程文件已经存在并且比源本地文件大,ChannelSftp.put抛出异常:

    long skip=0;
    if(mode==RESUME || mode==APPEND){
        try{
          SftpATTRS attr=_stat(dstb);
          skip=attr.getSize();
        }
        catch(Exception eee){
        }
    }
    if(mode==RESUME && skip>0){
        long skipped=src.skip(skip);
        if(skipped<skip){
          throw new SftpException(SSH_FX_FAILURE, "failed to resume for "+dst);
        }
    }
    
  • 根本不考虑修改时间


总而言之,恢复传输是否有意义由您决定。 RESUME 标志只应在您已经知道可以恢复传输时使用。