首页 > 其他分享 >测试大文件分块和合并

测试大文件分块和合并

时间:2023-07-11 11:47:22浏览次数:32  
标签:文件 file 测试 分块 合并 RandomAccessFile File new

文件分块的流程

  1. 获取源文件长度
  2. 根据设定的分块文件大小,计算出块数(向上取整,例如33.4M的文件,块大小为1M,则需要34块)
  3. 从源文件读取数据,并依次向每一个块文件写数据

文件分块测试代码如下

/**
    * 分块测试
    */
   @Test
   void testChunk() throws IOException {
       //源文件
       File file = new File("C:\\Users\\thirty\\Videos\\Captures\\1.mp4");
       //分块存储路径
       String chunkFilePath = "D:\\video\\chunk\\";
       //分块文件的大小
       int chunkSize = 1024 * 1024;
       //分块文件个数
       int chunkNum = Math.toIntExact(file.length() / chunkSize);
       if (file.length() % chunkSize != 0) {
           chunkNum += 1;
       }
       // 缓冲区大小
       byte[] bytes = new byte[1024];
       // 使用RandomAccessFile访问文件
       RandomAccessFile file_r = new RandomAccessFile(file, "r");
       // 遍历分块,依次向每一个分块写入数据
       for (int i = 0; i < chunkNum; i++) {
           // 创建分块文件,默认文件名 path + i,例如chunk1  chunk2
           File chunkFile = new File(chunkFilePath + i);
           //分块文件写入流
           RandomAccessFile file_rw = new RandomAccessFile(chunkFile, "rw");
           int len = -1;
           // 向分块文件写入数据
           while ((len = file_r.read(bytes)) != -1) {
               file_rw.write(bytes, 0, len);
               // 写满就停
               if (chunkFile.length() >= chunkSize) {
                   break;
               }
           }
       }
       file_r.close();
       System.out.println("写入分块文件完毕");
   }

文件合并流程

  1. 找到要合并的文件并按文件分块的先后顺序排序
  2. 创建合并文件
  3. 依次从合并的文件中读取数据冰箱合并文件写入数据
  • 文件合并的测试代码
void testMerge() throws IOException {
       // 块文件目录
       File chunkFolder = new File("D:\\video\\chunk\\");
       // 源文件
       File sourceFile = new File("C:\\Users\\thirty\\Videos\\Captures\\1.mp4");

       // 文件名升序排序
       File[] files = chunkFolder.listFiles();
       List<File> fileList = Arrays.asList(files);
       // 合并文件
       File mergeFile = new File("D:\\video\\chunk\\1.mp4");
       Collections.sort(fileList, Comparator.comparingInt(o -> Integer.parseInt(o.getName())));
       // 用于写文件
       RandomAccessFile raf_write = new RandomAccessFile(mergeFile, "rw");
       // 缓冲区
       byte[] buffer = new byte[1024];
       // 合并文件
       for (File chunkFile : fileList) {
           RandomAccessFile raf_read = new RandomAccessFile(chunkFile, "r");
           int len;
           while ((len = raf_read.read(buffer)) != -1) {
               raf_write.write(buffer, 0, len);
           }
           raf_read.close();
       }
       raf_write.close();
       // 判断合并后的文件是否与源文件相同
       FileInputStream fileInputStream = new FileInputStream(sourceFile);
       FileInputStream mergeFileStream = new FileInputStream(mergeFile);
       //取出原始文件的md5
       String originalMd5 = DigestUtils.md5Hex(fileInputStream);
       //取出合并文件的md5进行比较
       String mergeFileMd5 = DigestUtils.md5Hex(mergeFileStream);
       if (originalMd5.equals(mergeFileMd5)) {
           System.out.println("合并文件成功");
       } else {
           System.out.println("合并文件失败");
       }
   }

标签:文件,file,测试,分块,合并,RandomAccessFile,File,new
From: https://www.cnblogs.com/duanthirty/p/17544187.html

相关文章

  • Labview与阿特拉斯开放式通讯 网口读取扭矩值 包括Labview程序、阿特拉斯调试软件、开
    Labview与阿特拉斯开放式通讯网口读取扭矩值包括Labview程序、阿特拉斯调试软件、开放式通讯测试软件、开放式通讯协议、PM4000手册。ID:2668657244980176......
  • 巧用 bc 命令测试 Linux 主机的 CPU 性能
    今天向公司申请了一台Linux主机,作为平时的开发环境。由于自己并不依赖远程开发(大多数情况下项目都可以本地开发、调试),于是只申请了4C/8G的低配机器。突然好奇的是,这台机器的性能怎么样?磁盘就不测试了,IO应该和生产环境差不多。先看看CPU的信息:cat/proc/cpuinfoprocesso......
  • 开源一套接口自动化测试平台,大家一起学习交流
    一、概述Rocket是一款接口自动化测试平台,服务端是Python,前端Vue,源码下载方式放到末尾了。关键依赖:fastapihttprunner(v3.1.11版本)apschedulerelement-ui二、功能模块核心功能模块基本开发完成,可以直接拿来用,一些细节功能待开发,具体如下:系统管理用户管理字典管理......
  • Pytest测试框架
    一.pytest简介  测试框架:用来组织测试用例并进行运行控制的  使用测试框架可以做到以下几点:  挑选用例并批量执行  单条用例失败后不影响其他用例执行  不同范围的测试准备和环境清理方法  一套断言机制 运行完生成测试报告 常用测试框架:unitest......
  • 软件测试工程师笔记
    腾讯的面试官就贼喜欢问软件测试基础部分,字节的还好…所以在我以前通过校招上岸字节跳动后,将我自己找工作认真总结,并且写成面经文章了。这份笔记包括软件测试基础、Linux、Python、计算机网络、常见软件测试工具(LR、Jmeter)、数据库(MySQL为主)、常见逻辑题、以及软件测试面试中需要......
  • 20230710巴蜀暑期集训测试总结
    T1打个不太暴的暴力但是爆了。只对了subtask1,不清楚发生了什么。先建出Kruscal重构树,对每个询问二分答案,判断就用暴力启发式合并T2打了一个\(20pts\)dp。第一步没有想到,每怎么见过这种题。将问题转化为满足\(\foralli,x_i\leA_i,x_i\leB_i\)的序列\(x\)个数。枚......
  • 测试工程师
    软件测试书本推荐《google软件测试之道》《软件测试的艺术》《捉虫日记》《软件测试的经验及教训》《测试驱动开发》《移动APP测试实战》在知乎上,经常看到很多新手想要学习软件测试,却不知道该怎么开始,软件测试到底需要掌握哪些技能?小编粗略的整理了一份学习大纲,希望对刚......
  • 测试
    SpringBoot学习记录常见的问题这是一篇测试markdown文件无敌是多么寂寞啊啊啊啊大无畏yesthis我也没不知upackagecom.test.exception;importorg.springframework.http.HttpStatus;importorg.springframework.http.ResponseEntity;importorg.springframework.......
  • 云原生周刊:Dapr 完成模糊测试审计 | 2023.7.10
    开源项目推荐Shell-operatorShell-operator是一个在Kubernetes集群中运行事件驱动脚本的工具。node-problem-detectornode-problem-detector旨在使集群管理堆栈中的上游层可以看到各种节点问题。它是一个在每个节点上运行的守护进程,检测节点问题并将其报告给apiserver。......
  • Camstar表格自定义写js,实现单元格合并。
     效果: ......