• JavaIO


    1. SequenceInputStream

    表示其他输入流的逻辑串联。它从输入流的有序集合开始,并从第一个输入流开始读取,直到到达文件末尾,接着从第二个输入流读取,依次类推,直到到达包含的最后一个输入流的文件末尾为止。

    SequenceInputStream 可以认为是一个工具类,将两个或者多个输入流当成一个输入流依次读取。完全可以从 IO 包中去除,还完全不影响 IO 包的结构,却让其更 “纯洁” ――纯洁的 Decorator 模式。

    1-1. 序列流应用

    • 序列流只负责源。对多个流进行合并。
    • 切割or合并。将一个文件切割成多个文件 && 将多个文件碎片合并成一个文件。

    1-2. SequenceInputStream序列流的步骤

    1. 找到目标文件
    2. 建立数据输入输出通道
    3. 建立序列流对象
    4. 关闭资源

    2. 实例

    - 切割MP3:

    public static void cutFile() throws IOException{
        File file = new File("E:\Music\忘尘谷.mp3");
        //目标文件夹
        File dir = new File("E:\MyMusic");
        //建立数据输入通道
         FileInputStream fis = new FileInputStream(file);
        //建立缓冲数组
        byte[] buf = new byte[1024*1024];//1024*1024 = 1MB,即:把该音乐切割成每份1MB的大小
        int length = 0;
        //边读边写
        for (int i = 0; (length=fis.read(buf)) != -1; i++) {//读 (每次读1MB)
            FileOutputStream fos = new FileOutputStream(new File(dir,"wcg"+i+".mp3"));//建立数据输出通道
            fos.write(buf, 0, length);//
            fos.close();
        }
        fis.close();
    }

    - 合并MP3:

    public static void mergeFile() throws IOException{
        //找到目标文件
        File dir = new File("E:\MyMusic");
        //通过目标文件找到所有mp3,然后把这些mp3添加到vector集合中
        Vector<FileInputStream> vector = new Vector<FileInputStream>();
        File[] file = dir.listFiles();
        for (File file2 : file) {
            if(file2.getName().endsWith(".mp3")){//获取以.mp3结尾的文件名
                vector.add(new FileInputStream(file2));//添加到vector集合中
            }
        }
        Enumeration<FileInputStream> e = vector.elements();//返回此向量组件的枚举。即把上面集合中的元素给了e对象
        SequenceInputStream sis = new SequenceInputStream(e);//建立序列流对象//建立缓冲数组读取文件
        byte[] buf = new byte[1024];
        int length = 0;
        FileOutputStream fos = new FileOutputStream(new File("MyMusic\MergeMusic\合并音乐-忘尘谷.mp3"));//建立输出字节流
        while((length = sis.read(buf)) != -1){//
            fos.write(buf, 0, length);//
        }
        fos.close();
        sis.close();
    }
  • 相关阅读:
    Day18:继续添加前端代码
    Day17:今天为前端做的几件小事
    Day16:接口调试完成&紧急转前端开发
    Day25:报告编写等
    Day24:结论的撰写&&openid再次尝试
    Day23:个人小结的撰写&&对coderunner的熟悉
    Day22:数据库导入&分工&准备科研训练
    Day21:尝试脱离相同ip连接
    Day20:update功能的实现
    Day19:代码整合等
  • 原文地址:https://www.cnblogs.com/Dm920/p/12461688.html
Copyright © 2020-2023  润新知