9

如果有人知道如何将远程文件直接流式传输到文件对象中的快速方法,那么无需将文件临时存储在计算机上,将不胜感激!到目前为止,我从远程 ios 设备复制文件如下(使用 net.schmizz.sshj):

SSHClient ssh = new SSHClient();
ssh.addHostKeyVerifier(fingerprint);
ssh.connect(ip);

try {
    ssh.authPassword("username", "userpassword".toCharArray());
    ssh.newSCPFileTransfer().download(fileRemote, new FileSystemFile(fileLocal));
} catch (IOException ioe) {
    ioe.printStackTrace();
} finally {
    ssh.disconnect();
}

如果有人对解决方案的代码感兴趣:

正如 Nutlike 在他的回答中提到的,最好使用InMemoryDestFile. 所以创建以下类:

class MyInMemoryDestFile extends InMemoryDestFile {
    public ByteArrayOutputStream outputStream = new ByteArrayOutputStream();

    @Override
    public ByteArrayOutputStream getOutputStream() throws IOException {
        return this.outputStream;
    }
}

...在您执行下载操作的方法中,创建新类的实例:

MyInMemoryDestFile a = new StreamingInMemoryDestFile();

并访问输出流:

ssh.newSCPFileTransfer().download(remoteFile, a);
a.getOutputStream().toByteArray();

此致

4

1 回答 1

5

使用InMemoryDe​​stFile代替FileSystemFile还不够吗?

编辑:……然后使用getOutputStream()访问“文件”……</p>

于 2013-02-22T10:29:13.593 回答