通过网络发送大文件

时间:2015-04-17 04:43:48

标签: java spring file collections chunked

首先,我为冗长的描述道歉。但我尽力做到这一点。

目标是将组合大小为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以上的文件 - 这个逻辑出了什么问题?

1 个答案:

答案 0 :(得分:0)

替换

if(total = 51200)

以下内容:

if(total == 51200)

total = 51200不是一个比较语句,而是一个偏离你想要实现的逻辑的赋值。

希望有所帮助。