Сначала мои извинения за длинное описание. Но я изо всех сил стараюсь довести дело до конца.
Цель состоит в том, чтобы сгруппировать отдельные файлы с общим размером 50 МБ и отправить несколько файлов по 50 МБ каждый. Потому что я не хочу отправлять очень маленький файл по сети индивидуально. кроме того, отправка всех сразу не поможет, так как размер объединенных файлов может быть слишком большим.
Например, если я прикреплю 4 файла размером 50 МБ каждый, то общий размер будет 200 МБ, что слишком велико для отправки. Таким образом, вместо того, чтобы отправлять 200 МБ за один раз, отправьте только кратные 50 МБ один за другим, поэтому прокручивайте список файлов и измеряйте размер каждого файла, если он составляет ‹ 50 МБ, затем добавляйте его в список отправки, поэтому продолжайте добавлять отдельные файлы, пока он не достигнет 50 МБ, поэтому один раз он достигает 50 МБ, а затем отправляет этот файл_список. Продолжайте перебирать file_list и делайте то же самое для остальных файлов.
Что я пробовал:
Предположим, что список_файлов содержит 4 файла, т. е. 50 МБ, 40 МБ, 30 МБ, 20 МБ.
Collections.sort(files, new Comparator<File>() {
@Override
public int compare(File fileOne, File fileTwo) {
return fileOne.getSize() - fileTwo.getSize();//Sorting Asc.
}
});
Integer total = 0;
ArrayList<File> files = new ArrayList<File>();
for(File file:files) {
total = total + file.getSize();
if(total <= 51200 ) { //51200KB = 50MB
files.add(file);
if(total == 51200) {
send(files);
files = new ArrayList<File>();
total = 0;
}
} else {
send(files);
files = new ArrayList<File>();
total = 0;
}
}
if(files.size() > 0)
send(files);
Но отсутствует файл размером 30 МБ выше - что не так с этой логикой?