0

私のftpの場所には、2KB、76KB、216MBの3つの異なるサイズのファイルがあります。これらのファイルを 1 つずつ処理する必要があります。最初の 2 つのファイルは retrieveFileStream(FILE_NAME_HERE) を使用して簡単に取得できますが、3 番目のファイルの処理になると、時間がかかりすぎて (アプリケーションがハングし続け)、結果が得られません。ファイルを入力ストリームとして取得し、後でそれらから 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 に設定しましたが、特に 50MB 未満のファイルの場合は 8192 でもほぼ同様に機能し、その後、サイズが大きくなるとわずかに改善されました。

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 に答える