2016-04-18 13 views
1

aber ein Problem ist ein Zweifel. Ich lade Bilder von einem JAR auf meinen Server hoch. Ich habe einen Code zu berechnen, wie lange es den ganzen Server zu klettern nahm wie folgt:berechnen ungefähre Zeit Upload-Dateien

long startTime = System.currentTimeMillis(); 
long stopTime = System.currentTimeMillis(); 
long elapsedTime = stopTime - startTime; 
System.out.println("TIME ::: " + (float)(elapsedTime/1000) + " seg"); 

Jetzt dachte ich über eine ungefähre Anstiegszeit zu bekommen. Diese JAR-up Fotos von sehr guter Qualität und die Verzögerungszeit ist verlängert, möchte ich nur als zusätzliche Information für den Benutzer tun. Ich könnte mir das erste Bild ausdenken, berechnen, wie viel ich für das Hochladen dieses Bildes benötige und diesen Wert multipliziert mit dem Gesamtwert der Bilder, die der Benutzer im ausgewählten Ordner hat. Es scheint gültig zu sein, aber wollte zu dir kommen, wenn es etwas genaueres, irgendwie integriertes Java oder etwas sehr ähnliches gibt.

Im Moment habe ich auf diese Weise Bilder auf meinen Server hochladen:

public boolean uploadWithThumb(File image, String filename) { 
    reconnect(); 

    try { 
     _sftp.cd(Config.Config.IMAGES_FOLDER); 
     _sftp.put(new FileInputStream(image), filename, ChannelSftp.OVERWRITE); //no overwrite (, ChannelSftp.OVERWRITE) 

     OutputStream output = new ByteArrayOutputStream(); 
     //preview 
     if (Config.Config.WATERMARK_FILE == "" || !(new File(Config.Config.WATERMARK_FILE)).exists()) { 
      //no watermark 
      Thumbnails.of(image) 
       .size(Config.Config.PREVIEW_SIZE, Config.Config.PREVIEW_SIZE) 
       .outputQuality(Config.Config.PREVIEW_QUALITY) 
       .toOutputStream(output); 
     } else { 
      BufferedImage prev = Thumbnails.of(image) 
              .size(Config.Config.PREVIEW_SIZE, Config.Config.PREVIEW_SIZE) 
              .outputQuality(Config.Config.PREVIEW_QUALITY) 
              .asBufferedImage(); 
      int wsize = Config.Config.PREVIEW_SIZE * 75/100; 
      BufferedImage water = Thumbnails.of(Config.Config.WATERMARK_FILE) 
              .size(wsize, wsize) 
              .asBufferedImage(); 
      Thumbnails.of(prev) 
         .size(Config.Config.PREVIEW_SIZE, Config.Config.PREVIEW_SIZE) 
         .watermark(Positions.CENTER, water, 0.5f) 
         .outputFormat(Utils.getExtensionNoDot(image.getAbsolutePath())) 
         .toOutputStream(output); 
     } 

     InputStream decodedInput = new ByteArrayInputStream(((ByteArrayOutputStream) output).toByteArray()); 
     _sftp.cd(Config.Config.PREVIEW_FOLDER); 
     _sftp.put(decodedInput, filename, ChannelSftp.OVERWRITE); //no overwrite (, ChannelSftp.OVERWRITE) 

     //thumbs 
     output = new ByteArrayOutputStream(); 
     Thumbnails.of(image) 
        .size(Config.Config.THUMBS_SIZE, Config.Config.THUMBS_SIZE) 
        .toOutputStream(output); 
     decodedInput = new ByteArrayInputStream(((ByteArrayOutputStream) output).toByteArray()); 
     _sftp.cd(Config.Config.THUMBS_FOLDER); 
     _sftp.put(decodedInput, filename, ChannelSftp.OVERWRITE); //no overwrite (, ChannelSftp.OVERWRITE) 
    } catch (Exception e) { 
     e.printStackTrace(); 
     return false; 
    } 

    return true; 
} 

Antwort

0

Der einfachste Weg, um die ungefähre Zeit in Upload alle Dateien zu erhalten, ist eine Datei zu laden und die Geschwindigkeit berechnen:

long firstImageSize = getImageSize(0); //get the size of the first image in bytes 
long startTime = System.currentTimeMillis(); 
UploadFirstImage(); //Upload the first image 
long stopTime = System.currentTimeMillis(); 
long elapsedTime = stopTime - startTime; 
float meanSpeed = (float)firstImageSize/ (float)(elapsedTime/1000); //mean speed in bytes/second 

Sobald Sie die durchschnittliche Upload-Geschwindigkeit erreicht haben, müssen Sie die Gesamtgröße aller anderen Bilder ermitteln. Dann könnten Sie die ungefähre eplapsed Zeit berechnen einfaches Teilen:

long allImagesSize = 0; 
for(int i = 1; i<numImages; i++){ 
    allImagesSize += getImageSize(i); //Calculate the size of all the images in bytes 
} 
System.out.println("Eplapsed time ::: " + (float)(allImagesSize/meanSpeed) + " seg"); 

Wenn Sie die Zeitschätzung in Echtzeit aktualisieren möchten, können Sie einen Thread verwenden diese in regelmäßigen Abständen zu berechnen.

+0

Hallo! Danke für die Antwort auf Ihren Code, aber ein Fall sagte mir, dass es etwa 226 Sekunden dauern würde, während es 50 Sekunden dauerte. Ich bekomme die Dateigröße mit file.length() – hateful

+0

die Upload-Geschwindigkeit ist relativ zu der Netzwerknutzung und den Protokollen wie TCP/IP, die ihre Sende-/Empfangsfenster variieren. Um eine genauere Schätzung zu erhalten, können Sie die Geschwindigkeit in regelmäßigen Abständen mit demselben Code neu berechnen. –

Verwandte Themen