首页 > 解决方案 > JSCH - 从远程流读取时写入远程流

问题描述

我想在不下载文件的情况下获取远程文件的输入流并加密其字节数据,而只需使用以下方法返回的 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() 方法调用没有帮助。

有什么建议么?谢谢。

标签: javasftpinputstreamjschoutputstream

解决方案


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

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


推荐阅读