JSCH-从远程流读取时写入远程流

问题描述 投票:1回答:1

我想获取远程文件的输入流并加密字节数据而不下载文件,而只是使用以下方法返回的InputStream对象。

  1. sftpChannel.get(“ ...”);

以下是我正在尝试执行的代码示例。这是我的代码:

InputStream is = null;
OutputStream os = null;
try {
    is = sftpChannel.get("/.../decrypted.txt");
    os = sftpChannel.put("/.../ftp_encrypted.txt", ChannelSftp.OVERWRITE);

    int byteRead = is.read();
    while (byteRead != -1) {

        os.write(((byte) byteRead) << 2); //encrypt the byte in some way
        os.flush();
        byteRead = is.read();
    }
    is.close();
} catch (Exception e) {

    e.printStackTrace();
} finally {

    if (is != null) {
        is.close();

    }

    if (os != null) {
        os.close();

    }
}

我以为应该足够了,但是我收到了IOException:

java.io.IOException:1:文件结尾位于com.jcraft.jsch.ChannelSftp $ 1.flush(ChannelSftp.java:858)

问题似乎与OutputStream对象的刷新有关。删除.flush()方法调用没有帮助。

有什么建议吗?谢谢。

java sftp inputstream jsch outputstream
1个回答
1
投票

最后,实现我的目标的唯一方法是创建两个SFTP通道,一个用于输入,一个用于输出。通过创建一个界面并隐藏这两个通道,我可以不加思索地做我想做的任何事情。

感谢您的建议,Thorbjørn Ravn Andersen

© www.soinside.com 2019 - 2024. All rights reserved.