0

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

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

4

1 回答 1

1

帮助您可能为时已晚(尽管可能会帮助其他人)但是当我遇到类似的问题(上传和下载)时,我能够通过设置缓冲区大小 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);
    }
}

希望这可以帮助。

于 2013-07-29T14:23:21.253 回答