2016-06-22 3 views
2

Я хотел бы знать, как я могу получить байты в секунду.
Вот что я получил до сих пор:Как получить байты в секунду при загрузке?

while ((count = in.read(data, 0, byteSize)) > -1) { 
    downloaded += count; 
    fout.write(data, 0, count); 
    output.setText(formatFileSize(downloaded) + "/ " + formatFileSize(fileLength)); 
    // perSecond.setText(formatFileSize((long) speed)+"/s"); 
    progressbar.setValue((int) downloaded); 

    if (downloaded >= fileLength) { 
     System.out.println("Done!"); 
     JOptionPane.showMessageDialog(frame, "Done!", "Info", 1); 
     progressbar.setValue(0); 
     output.setText(""); 
     perSecond.setText(""); 
     return; 
    }  

Как именно я хотел бы сделать это?

+0

Используйте [System.currentTimeMillis()] (http://docs.oracle.com/javase/8/docs/api/java/lang/System.html#currentTimeMillis--). «Байты в секунду» буквально означает «количество байтов, деленное на прошедшие секунды». – VGR

ответ

-1

Один из вариантов - создать класс DownloadProgressTask, который обновит ваш интерфейс.

Пример:

class DownloadProgressTask extends TimerTask 
{ 
    // I'm not sure what types these guys are so change them accordingly 
    private Object output; 
    private Object progressbar; 

    private long fileLength = 0; 

    private AtomicLong downloaded = new AtomicLong(); 

    public DownloadProgressTask (Object output, Object progressbar, long fileLength) 
    { 
     this.output = output; 
     this.progressbar = progressbar; 

     this.fileLength = fileLength; 
    } 

    // Do your task here 
    public void run() 
    { 
     int downloadedInt = (int) downloaded.get(); 
     output.setText(formatFileSize(downloadedInt) + "/ " + formatFileSize(fileLength)); 
     // perSecond.setText(formatFileSize((long) speed)+"/s"); 
     progressbar.setValue(downloadedInt); 
    } 

    public void updateDownloaded (long newVal) 
    { 
     downloaded.set(newVal); 
    } 
} 

Тогда вы бы запланировать эту задачу перед началом время цикла, который считывает файл:

Пример:

// Create Timer Object 
Timer time = new Timer(); 

// Create the download task 
DownloadProgressTask dt = new DownloadProgressTask(output, progressbar, fileLength); 

// schedule task to run now and every 1 second thereafter 
time.schedule(dt, 0, 1000); 

Теперь, ваш в то время как цикл будет выглядеть примерно так:

while ((count = in.read(data, 0, byteSize)) > -1) { 
    downloaded += count; 
    fout.write(data, 0, count); 

    // let the task know the update 
    dt.updateDownloaded(downloaded); 

    if (downloaded >= fileLength) { 

     // cancel the task here 
     dt.cancel(); 

     System.out.println("Done!"); 
     JOptionPane.showMessageDialog(frame, "Done!", "Info", 1); 
     progressbar.setValue(0); 
     output.setText(""); 
     perSecond.setText(""); 
     return; 
    } 
}  
Смежные вопросы