FTPClient(org.apache.commons.net.ftp.FTPClient)无法检索大型xml文件



在我的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;

你能指出我这里做错了什么吗?

这可能是晚来帮助你(可能帮助别人虽然),但当我有一个类似的问题(上传和下载),我能够通过设置缓冲区大小,setBufferSize(),连接后看到下面的代码片段来解决它。这使得我上传240MB文件的时间从12分钟缩短到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);
    }
}

最新更新