首先,我为冗长的描述道歉。但我尽力做到这一点。
目标是将组合大小为50MB的单个文件分组,并发送每个50MB的倍数。因为我不想单独通过网络发送一个非常小的文件。除了一次性发送所有内容之外,由于组合文件的大小可能太大,因此也无济于事。
对于(例如)如果我附加4个大小为50MB的文件,则组合大小将为200MB,这太大而无法发送。因此,不是一次发送200MB,而是一个一个地发送50MB的倍数,所以循环遍历file_list并测量每个文件大小(如果它是<50MB)然后将其添加到send_list,所以继续添加单个文件,直到它达到50MB,所以一旦达到50MB,然后发送该file_list。继续遍历file_list并对其余文件执行相同操作。
我尝试过:
假设file_list包含4个文件,即50MB,40MB,30MB,20MB
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);
但它缺少30MB以上的文件 - 这个逻辑出了什么问题?
答案 0 :(得分:0)
替换
行if(total = 51200)
以下内容:
if(total == 51200)
total = 51200
不是一个比较语句,而是一个偏离你想要实现的逻辑的赋值。
希望有所帮助。