zoukankan      html  css  js  c++  java
  • 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();
    }
  • 相关阅读:
    careercup-树与图 4.6
    careercup-树与图 4.5
    careercup-树与图 4.4
    careercup-树与图 4.3
    oracle 建表时显示ORA-00904无效的标识符
    Unable to read TLD "META-INF/c.tld" from JAR file
    MIME TYPE
    JavaWeb response对象常用操作
    移动硬盘文件删除后,空间没有变大
    Redis 数据结构解析和命令指南
  • 原文地址:https://www.cnblogs.com/Dm920/p/12461688.html
Copyright © 2011-2022 走看看