Справка по Java Progress Bar - PullRequest
       16

Справка по Java Progress Bar

0 голосов
/ 20 марта 2011

Мне нужно реализовать индикатор выполнения для следующей задержки задачи

FileOutputStream Fos= new FileOutputStream(FilePath);
byte buffer[]=Services.downloadFile(FilePath);
Fos.write(buffer);

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

1 Ответ

1 голос
/ 20 марта 2011

Это не легко, так как Services.downloadFile() не дает вам файл кусками.Если бы у вас был цикл, это было бы просто.

Если вы можете изменить API, я предлагаю изменить его следующим образом:

Services.downloadFile(File, OutputStream);

и позволить downloadFile() записать файлв поток.Теперь вы можете обернуть поток и сосчитать байты, записанные путем перегрузки различных версий write().

[EDIT] Я видел, что Services является прокси RMI.В этом случае вы не можете использовать подход выше.Вместо этого он становится более сложным:

Вам нужен пул загрузок на вашем сервере (подумайте «Карта»).Пул позволяет запрашивать еще один блок данных для каждой загрузки.

Итак, на вашем сервере вам необходимо:

  1. Создать объект, который обрабатывает загрузку и имеет byte[] read() method.
  2. Поместите объекты на карту с помощью ключа.Как-нибудь отправьте ключ клиенту.
  3. Для каждого объекта создайте поток, который фактически загружает данные и добавляет данные в буфер.Метод read() возвращает содержимое буфера и очищает его.

На клиенте:

  1. Вам необходимо вызвать метод на сервере, чтобы создать новыйзагрузите объект и запустите поток загрузки.
  2. Теперь вам нужен цикл, который вызывает read() для объекта загрузки на сервере.API выглядит примерно так: read(key), сервер ищет ключ на карте и затем вызывает read() для объекта загрузки.
  3. Показывает прогресс по мере записи результата вызовов чтения в файл
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...