2016-07-19 17 views
0

Was ist die maximale Download-Geschwindigkeit mit 1 Thread von Apaches FTPClient?FTPClient Java Beschleunigung herunterladen

Ich kann nicht mehr, als etwa 6 MB/s mit einem FPTSClient Verbindung (AUTH SSL). Wenn ich über ein FTP-Tool wie FTP Rush im Zusammenhang mit 150mb/s und mehr verbinden!

1.000,0 Byte (s) in 6,97 (150,376.60 Kbps)

Ich versuche, habe bereits die ftpBufferSize zwischen 1024 * 1024 und 1024 * 1024 * 10, aber nichts geändert zu erhöhen.

Dies ist nur ein kleiner Ausschnitt, wo ich auf dem FTP-Verbindung:

 ftp.setConnectTimeout(8000); 
     ftp.setDefaultPort(this.port); 
     try { 
      ftp.connect(this.host); 
     } catch (Exception e) { 
      LogController.logMessage("Connect::tryConnect -> Exception: "+e.getMessage()); 
      LogController.logMessage(e); 
     } 

     if(ftp.isConnected()) { 

      if(this.ssl) { 
       ((FTPSClient) ftp).execPBSZ(0); 
      } 

      LogController.logMessage("Connect::tryConnect -> Open new connection."); 
      if(!ftp.login(this.username, this.password)) { 
       LogController.logMessage("Connect::tryConnect -> "+getReplyString()); 
       ftp.logout(); 
      } else { 
       LogController.logMessage("Connect::tryConnect -> User login correct."); 
       if(this.ssl) { 
        ((FTPSClient) ftp).execPROT("P"); 
        LogController.logMessage("Connect::tryConnect -> "+getReplyString()); 
       } 

       if(ftp.getSystemType().toLowerCase().contains("win") == false) 
        ftp.configure(new FTPClientConfig(FTPClientConfig.SYST_UNIX)); 


       int reply = ftp.getReplyCode(); 
       if (!FTPReply.isPositiveCompletion(reply)) { 
        ftp.disconnect(); 
        LogController.logMessage(getReplyString()); 
       } else { 

        ftp.enterLocalPassiveMode(); 
        ftp.setBufferSize(10485760); 
        ftp.setRemoteVerificationEnabled(false); 
        ftp.setListHiddenFiles(true); 

Und hier ist der letzte Download-Schnipsel:

 if (download) {     
      OutputStream output; 
      output = new FileOutputStream(tmpPath); 

      if(!ftp.setFileType(FTP.BINARY_FILE_TYPE)) 
       LogController.logMessage("Connect::downloadFiles -> Could'nt set binary file type."); 

      DateFormat dateFormat = new SimpleDateFormat("HH:mm:ss"); 
      Date d = new Date(); 
      String date = dateFormat.format(d); 
      LogController.logMessage("Connect::downloadFiles -> Start downloading "+file+", "+date+", Buffersize: "+ftp.getBufferSize()); 

      if(!ftp.retrieveFile(ftpFilePath, output)) { 
       LogController.logMessage("Connect::downloadFiles -> Could'nt download the file: "+file); 
       output.close(); 
       return false; 
      } else { 
       output.close(); 
       d = new Date(); 
       date = dateFormat.format(d); 
       LogController.logMessage("Connect::downloadFiles -> Download finished. "+date); 
       return true; 
      } 
     } 

ich große Dateien über 100 MB übertragen müssen. Gibt es eine Möglichkeit, den Download zu beschleunigen? Vielen Dank im Voraus, Grüße.

+0

Versuchen Sie, eine 'BufferedOutputStream' statt der Schnittstelle zu verwenden' OutputStream' –

+0

Wenn ich die Zeile 'Output Ausgabe ändern,' auf 'BufferedOutputStream Ausgang = new BufferedOutputStream (neuer Fileoutputstream (tmppath));' i 8sec noch für ein brauchen 48 MB Datei. Das sind also fast 6 MB/s. Es gibt keine Veränderung, Grüße. – pnk

Antwort

0

Endlich eine Lösung bekommen. Nach dem Entfernen dieser Zeile:

((FTPSClient) ftp).execPROT("P"); 

Es gab kein Problem 100MBps zu erreichen +. Mit dieser Linie gab es keine Möglichkeit, höhere Rate als 6-7MBps zu bekommen, Grüße.