我需要使用Java代码中的单个SFTP连接从远程服务器同时提取文件。
我已经有很少的链接可以在单个连接上逐个拉取文件。 像:
使用sftpChannel.ls("Path to dir");
将给定路径中的文件列表作为向量返回,您必须迭代向量以下载每个文件sftpChannel.get();
但我想同时拉多个文件,例如。单个连接上一次有2个文件。
谢谢!
答案 0 :(得分:0)
ChannelSftp.get
method会返回InputStream
。
因此,您可以多次调用get
,为每次下载获取一个流。然后继续轮询流,直到所有文件都到达文件末尾。
虽然我没有看到,但这会给你带来顺序下载的优势。
如果您想提高性能,首先需要知道什么是瓶颈。
典型的瓶颈是:
网络速度:如果您已经使网络速度饱和,则无法改善任何内容。
网络延迟:如果延迟是瓶颈,则增加SFTP请求队列的大小可能会有所帮助。使用ChannelSftp.setBulkRequests
method(默认值为16,因此请使用更高的数字)
CPU:如果CPU是瓶颈,您必须提高加密实施的效率,或者将负载分散到CPU核心。传播单个会话/连接的加密负载是棘手的,并且必须在低级SSH实现上得到支持。我不认为JSch或任何其他实现支持这一点。
磁盘:如果磁盘驱动器(本地或远程)是瓶颈(不太可能),即使使用单个连接,如上所示的并行传输也可能有所帮助,如果并行传输使用不同的磁盘驱动器
有关更深入的信息,请参阅我的答案: