java - JSCH - 从远程流读取时写入远程流
问题描述
我想在不下载文件的情况下获取远程文件的输入流并加密其字节数据,而只需使用以下方法返回的 InputStream 对象。
- 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() 方法调用没有帮助。
有什么建议么?谢谢。
解决方案
最后,实现我的目标的唯一方法是创建两个 SFTP 通道,一个用于输入,一个用于输出。通过创建一个界面并隐藏这两个通道,我可以不假思索地做任何我想做的事情。
感谢您的建议,Thorbjørn Ravn Andersen
推荐阅读
- c++ - 为什么我不能将元素插入到数组中的列表中?
- python-3.x - 在特定条件下从数据框中获取值
- javascript - 如何使用 Gmail API 和 Javascript 发送带有本地附件的电子邮件?
- wordpress - 自更新 WordPress 和 ACF 插件以来,标签 ACF 'repeater' 不再起作用
- ios - 如何在swift中将url作为url参数传递?
- java - Spring boot kafka 在 application.properties 中设置 ackOnError
- postgresql - 如何将默认值从基表复制到视图中?
- spring-boot - bean验证在weblogic下不起作用
- c# - 将 Outlook.Mailitem 转换为 MIME 类型而不保存或发送邮件
- r - 在 R 中使用余数模运算符进行逻辑比较