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

Хотите показать хорошо отформатированный вывод относительно скорости полосы пропускания во время загрузки

У меня есть этот расчет ниже благодаря @Tomasz Nurkiewicz, и он показывает
мега*байты* в секунду, когда я загружаю файл.

long start = System.nanoTime();
long totalRead = 0;
final double NANOS_PER_SECOND = 1000000000.0;
final double BYTES_PER_MIB = 1024 * 1024;

    while ((val = bis.read(buffer, 0, 1024)) > 0) {
        //...
        totalRead += val;
        double speed = NANOS_PER_SECOND / BYTES_PER_MIB * totalRead / (System.nanoTime() - start + 1)
    }

Хотелось бы, чтобы это было так. Я получаю мега*байты* в секунду из расчета, и из этого я ввожу if statement для выбора КБайт/с, МБит/с (не уверен) или просто как обычный FTP-клиент показывает скорость.

if( KByte/s something) {
   System.out.print(your current speed xx KB/s);
}else if(MByte/s something){
   System.out.print(your current speed xx MB/s);
}

Моя проблема в том, что я должен указать в операторе if?

надеюсь, вы понимаете, что я пытаюсь сделать


person Erik    schedule 16.11.2011    source источник


Ответы (2)


Существует FileUtils.byteCountToDisplaySize() в Apache Commons IO:

System.out.println(
  "your current speed is " + FileUtils.byteCountToDisplaySize(12345) + "/s"
)

// your current speed is 12 KB/s

Также см. (возможны дубликаты):

person Tomasz Nurkiewicz    schedule 16.11.2011
comment
поблагодарите меня, используя ответы Mr Ed по вашей ссылке, спасибо. Единственная проблема заключается в том, что мой код дает мне двойное значение, например 0,5683736337 МБайт/с, и мне нужно преобразовать это в длинное, поскольку метод @Mr Ed принимает длинное значение. Является ли 0,5683736337 таким же, как 5683736337 МБ?? - person Erik; 17.11.2011
comment
Просто пропустите часть `/BYTES_PER_MIB`, чтобы иметь байты, а не MiB. - person Tomasz Nurkiewicz; 17.11.2011

Я действительно не совсем понимаю, чего вы хотите, это сбивает с толку, что у вас есть мега ** байты в секунду в вашем коммутаторе.

Как вы, кажется, знаете, оператор switch должен иметь либо enum, либо int, и ваш текущий номер не является ни тем, ни другим.

Если вы хотите автоматически переходить от кбит/с к Мбит/с по мере увеличения числа, я думаю, вы хотите использовать оператор if с порогом.

Если вы хотите использовать настройку, которую пользователь устанавливает в качестве предпочтения, вам просто нужно передать эту настройку (либо перечисление, либо целое число) в эту функцию, чтобы она могла обработать ответ в требуемом формате.

Если вы не хотите делать ни одну из этих вещей, я нахожу ваш вопрос немного запутанным.

person Grouchal    schedule 16.11.2011
comment
обновляя мой вопрос, да, если заявление, я лучше вижу это. Но какие значения для оператора if? Я думаю, что могу установить неправильные значения и показать Мбит, когда это Кбит или что-то в этом роде, так как у меня проблемы с проверкой правильности вывода. - person Erik; 17.11.2011