我想获取远程文件的输入流并加密字节数据而不下载文件,而只是使用以下方法返回的InputStream对象。
以下是我正在尝试执行的代码示例。这是我的代码:
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()方法调用没有帮助。
有什么建议吗?谢谢。
最后,实现我的目标的唯一方法是创建两个SFTP通道,一个用于输入,一个用于输出。通过创建一个界面并隐藏这两个通道,我可以不加思索地做我想做的任何事情。
感谢您的建议,Thorbjørn Ravn Andersen