FTPClient (org.apache.commons.net.ftp.FTPClient) не может получить большой XML-файл - PullRequest
0 голосов
/ 30 августа 2011

У меня есть три разных размера файлов в моем местоположении ftp с 2 КБ, 76 КБ и 216 МБ. Я должен обработать эти файлы один за другим, я могу легко получить первые два файла, используя 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;

Не могли бы вы указать, что я здесь не так делаю?

1 Ответ

1 голос
/ 29 июля 2013

Возможно, уже поздно, чтобы помочь вам (хотя, возможно, помочь кому-то еще), но когда у меня возникла похожая проблема (и загрузка, и загрузка), я смог ее решить, установив размер буфера setBufferSize (), после подключения см. фрагмент кода ниже. Это заняло у меня загрузку с 12 минут для файла размером 240 МБ до 18 секунд с аналогичным улучшением загрузки.

У меня BUFFER_SIZE установлен на 32768, но 8192 работал почти так же хорошо, особенно для файлов размером менее 50 МБ, после чего произошло небольшое улучшение с большим размером.

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);
    }
}

Надеюсь, это поможет.

...