zoukankan      html  css  js  c++  java
  • 文件分段后,进行分片上传逻辑

     正文前先来一波福利推荐:

    福利一:

    百万年薪架构师视频,该视频可以学到很多东西,是本人花钱买的VIP课程,学习消化了一年,为了支持一下女朋友公众号也方便大家学习,共享给大家。

    福利二:

    毕业答辩以及工作上各种答辩,平时积累了不少精品PPT,现在共享给大家,大大小小加起来有几千套,总有适合你的一款,很多是网上是下载不到。

    获取方式:

    微信关注 精品3分钟 ,id为 jingpin3mins,关注后回复   百万年薪架构师 ,精品收藏PPT  获取云盘链接,谢谢大家支持!

     

    ------------------------正文开始---------------------------

    思路:使用RandomAccessFile类,先获取文件的总长度,然后设置分片的大小buff,计算出需要分多少块,最后一块存在不满的buff,进行单独的处理。 

        public static void startMultiPartUpload(String file)
        {
            RandomAccessFile randomAccessFile = null;
            RandomAccessFile  out = null;
            try{
                out = new RandomAccessFile("D:\data\xxxx", "rw");
                randomAccessFile = new RandomAccessFile(file, "rw");
                long fileLength = randomAccessFile.length();
                //每个分块为1M
                int chunkSize = 1024 * 1024;
                byte[] chunkData = new byte[chunkSize];
                int offset = 0;
                int readLen = 0;
                while (true)
                {
                    if (offset >= fileLength) {                                             //当offset偏移与文件长度一致时,停止循环
                        break;
                    }
                    //将指针指向最新的偏移位
                    randomAccessFile.seek(offset);
                    if ((readLen = randomAccessFile.read(chunkData, 0, chunkSize)) == -1)   //其实此处返回的长度为实际读取到字节数组中的长度
                    {
                        break;
                    }
    
                    if(readLen < chunkSize){                                                 //字节数组没有填充满时,进行实际长度的填充
                        byte[] realChunkData = new byte[readLen];
                        System.arraycopy(chunkData, 0, realChunkData, 0, readLen);
                        chunkData = realChunkData;
                    }
    
    
                    out.write(chunkData);
    
    
    
                    offset = offset + readLen;
                }
            }catch(Exception e){
                e.printStackTrace();
            }finally {
                try {
                    randomAccessFile.close();
                    out.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
    
        }
  • 相关阅读:
    hdu 3496
    poj 2374
    zoj 3399
    poj 1321
    sgu 365
    hdu 3555
    poj 3345
    poj 2355
    Android重命名文件
    在workflow中传值的sample
  • 原文地址:https://www.cnblogs.com/gxyandwmm/p/11988059.html
Copyright © 2011-2022 走看看