我的ftp位置有三种不同大小的文件,分别为2KB,76KB和216MB。我必须逐个处理这些文件,我能够使用retrieveFileStream(FILE_NAME_HERE)轻松检索前两个文件,但是当处理第三个文件时,它需要永远(我的应用程序保持挂起)没有结果。我必须将文件作为输入流,并在以后使用jaxb对象。这是我用来获取输入流的实用方法:
public InputStream convertToInputStream(FTPFile file) throws IOException{
if(file!=null){
InputStream is=ftp.retrieveFileStream(file.getName());
ftp.completePendingCommand();
return is;
}
return null;
你能指出我在这里做错了吗?
答案 0 :(得分:1)
这可能是为了帮助你(可能会帮助其他人),但是当我遇到类似的问题(上传和下载)时,我能够通过设置缓冲区大小setBufferSize()来解决它,连接后看到下面的代码片段。这使得我从12分钟上传240MB文件到18秒,下载也有类似的改进。
我将BUFFER_SIZE设置为32768但是8192几乎也能正常工作,特别是对于50MB以下的文件,之后在较大的尺寸上略有改进。
if (this.ftpClient.isConnected())
{
this.ftpClient.enterLocalPassiveMode();
this.ftpClient.setBufferSize(BUFFER_SIZE);
try
{
this.ftpClient.setFileType(FTP.BINARY_FILE_TYPE);
}
catch (IOException e)
{
log.error(e.getLocalizedMessage(), e);
throw Throwables.propagate(e);
}
}
希望这有帮助。