2

我正在将远程文件从 windows 共享文件夹复制到 linux 机器。复制需要很长时间。在 320 MB 中,仅 200 Kb 在 10 小时内复制。

这是我的代码片段:

try {
    String user = "xxxx";
    String pass ="yyyy";    
    NtlmPasswordAuthentication auth = new NtlmPasswordAuthentication("",
            user, pass);
    String sharepath ="smb://aa.bb.com/root/Test/Access.mdb";           
    SmbFile remoteFile = new SmbFile (sharepath, auth);

    OutputStream os = new FileOutputStream("/home/test/Access.mdb");
    InputStream is = remoteFile.getInputStream();
    int ch;
    while ((ch = is.read()) != -1) {
        os.write(ch);
    }
    os.close();
    is.close();

} catch (Exception e) { 
    e.printStackTrace(); 

}

如何减少复制时间?

4

2 回答 2

1

如果复制 200KB 需要 10 个小时,那么您的设置存在严重问题。可能存在网络问题,或者您的代码和设置可能会触发 jcifs 或 Windows 中的错误。启用所有日志记录,并可能使用调试器和配置文件来查看时间花在哪里。

作为一种快速解决方法,您可以考虑使用不同的协议,如 SSH 或 rsync 与 SSH。

或者看看像XtreemFS这样的远程文件系统(不过,在你的情况下可能有点过分了)。

于 2013-11-12T09:17:41.997 回答
0

使用缓冲时,从/到大多数资源的流式传输速度更快。

为此目的使用BufferedInputStream和:BufferedOutputStream

OutputStream os = new BufferedOutputStream(new FileOutputStream("/home/test/Access.mdb"));
InputStream is = new BufferedInputStream(remoteFile.getInputStream());

在关闭OutputStream, alwaysflush()之前,当任何包装的流使用缓冲时,这一点至关重要。关闭而不刷新会导致数据丢失。

os.flush();
os.close();
is.close();
于 2013-11-12T09:02:42.097 回答