正文前先来一波福利推荐:
福利一:
百万年薪架构师视频,该视频可以学到很多东西,是本人花钱买的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(); } } }