我们有一个场景,我们试图解组java对象,将其转换为输入流并使用JSCH API对其进行SFTP
基本 - >我们的目标是强制jSCH以INPUTSTREAM的形式推送对象,而不将其转换为文件,然后像这个例子一样发送它:
// create a session
session = jsch.getSession(ftpUserName, ftpHost, ftpPort);
channel = session.openChannel("sftp");
channel.connect();
ChannelSftp sftpTunnel = (ChannelSftp) channel;
// push the file you created using the channel created by the session
File f = new File(fileToTransmit);
>> **sftpTunnel.put(new FileInputStream(f), f.getName());**
除了我们想要切换掉最后一行以使用普通的InputStream而不与任何文件相关联。
根据jSCH API - 不使用FileInputStream IS POSSIBLE:
void put(InputStream src, String dst)
关于我们如何做到这一点的任何想法?
我们可以使用ObjectOutputStream吗?有没有办法获取一个对象并解组它并将它FEED到一个Inputstream而不在中间创建一个文件?
由于
答案 0 :(得分:0)
我知道这已经很晚了但是对于那些遇到类似问题的人来说这可能会有用
/* Code to connect as posted in your question */
/*
* Getting the file from the respective directory
* Storing it in an InputStream
*/
sftpChannel.cd(Src_Directory);
InputStream temp = sftpChannel.get(Your_filename);
System.out.println(temp);// can view the file as an obj
/*
* Converting stream to string and then back to InputStream using utils
* Needed to do this as the file being "put" was not of the right charset
*/
String theString = IOUtils.toString(temp, "UTF-8");
InputStream temp1 = IOUtils.toInputStream(theString, "UTF-8");
/*
* Putting the file back to resp directory
* with a filename
/*
sftpChannel.cd(Tar_Directory);
sftpChannel.put(temp1, filename);
/* Code to close channel and session! */
在这里,我假设我们正在将输入流“放入”同一主机。如果不是,我们可以始终连接到所需的主机并将文件放在那里。
希望这有帮助!