Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/347.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 通过SSH从服务器传输大文件的一部分_Java_Unix_Ssh_File Transfer - Fatal编程技术网

Java 通过SSH从服务器传输大文件的一部分

Java 通过SSH从服务器传输大文件的一部分,java,unix,ssh,file-transfer,Java,Unix,Ssh,File Transfer,对于我们的应用程序,我们根据不同的环境登录到多个不同远程服务器上的文件。尽管滚动是每天进行的,但对于某些环境,日志可能会变得非常大(典型的高流量环境中,有些日志每天达到10 GB) 基本上,我试图实现的功能类似于Unixless命令,在该命令中,我可以跳转到文件的最后一行,只读取最新的部分 我从Java中的JSch开始,它对小文件很有效,因为我可以跳到末尾减去一组字节,然后从日志的最后一部分创建一个新文件。代码如下所示: Session session = createJSchSession(u

对于我们的应用程序,我们根据不同的环境登录到多个不同远程服务器上的文件。尽管滚动是每天进行的,但对于某些环境,日志可能会变得非常大(典型的高流量环境中,有些日志每天达到10 GB)

基本上,我试图实现的功能类似于Unix
less
命令,在该命令中,我可以跳转到文件的最后一行,只读取最新的部分

我从Java中的
JSch
开始,它对小文件很有效,因为我可以跳到末尾减去一组字节,然后从日志的最后一部分创建一个新文件。代码如下所示:

Session session = createJSchSession(user, pass, host, port);
ChannelSftp sftpChannel = createSftpChannel(session);
long filesize = getFileSize(sftpChannel, path);

InputStream in = sftpChannel.get("/path/to/file/hello.log");

in.skip(filesize - bytesToRead);
但是,对于较大的文件,执行时间并不比只传输整个文件好多少。计时之后,我确定
skip
方法是罪魁祸首,因为它似乎只调用了
in.read()
n次


问题是,如何从远程服务器传输一小块文本文件?我甚至没有死定决心使用Java,任何类型的脚本都可以使用。

为什么不使用rsync呢?您可以使用tail获取文件的结尾,然后传输,但是我认为cron和rsync是您的朋友。并且rsync可以通过ssh进行操作。@fge-Uh,不,如果10 GB文件中只有10个字节被更改,rsync将只下载更改,以减少一些开销。这就是rsync的用途。@fge来自rsync手册页:“它以其增量传输算法而闻名,该算法通过只发送源文件和目标中现有文件之间的差异来减少通过网络发送的数据量。”