• IO(三)----序列流


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

    常用方法:

    1、构造方法

    SequenceInputStream(InputStream s1, InputStream s2) 通过记住这两个参数来初始化新创建的 SequenceInputStream(将按顺序读取这两个参数,先读取 s1,然后读取 s2),以提供从此 SequenceInputStream 读取的字节。

    SequenceInputStream(Enumeration<? extends InputStream> e) 通过记住参数来初始化新创建的 SequenceInputStream,该参数必须是生成运行时类型为 InputStream 对象的 Enumeration 型参数。

    2、读取方法

    int read(byte[] b, int off, int len) 将最多 len 个数据字节从此输入流读入 byte 数组。

    int read()  从此输入流中读取下一个数据字节。

    3、关闭资源

    void close() 关闭此输入流并释放与此流关联的所有系统资源。

    常用操作就是合并读取

    示例代码:

     1 // 需求: 把一首mp3先切割成n份,然后再把这些文件合并起来。
     2 public class DemoSequenceInputStream {
     3 
     4     public static void main(String[] args) throws IOException {
     5 //        split();
     6         merage();
     7     }
     8     
     9     //分隔
    10     public static void split() throws IOException{
    11         File inFile = new File("D:\西单女孩-原点 (3D武侠动画《画江湖之不良人》主题曲).mp3");
    12         FileInputStream fileInputStream = new FileInputStream(inFile);
    13         byte[] buf = new byte[1024*1024];
    14         int length = 0;
    15         for(int i = 0; (length = fileInputStream.read(buf)) != -1;i++){
    16             File outFile = new File("D:\SplitMusic\","part"+i+".mp3");
    17             FileOutputStream fileOutputStream = new FileOutputStream(outFile);
    18             fileOutputStream.write(buf, 0, length);
    19             fileOutputStream.close();
    20         }
    21         fileInputStream.close();
    22     }
    23     
    24     //合并
    25     public static void merage() throws IOException{
    26         File dir = new File("D:\SplitMusic");
    27         File[] files = dir.listFiles();
    28         //对数据进行排序
    29         Arrays.sort(files);
    30         Vector<FileInputStream> vector = new Vector<>();
    31         for (File file : files) {
    32             if (file.getName().endsWith(".mp3")) {
    33                 FileInputStream fileInputStream = new FileInputStream(file);
    34                 vector.add(fileInputStream);
    35             }
    36         }
    37         Enumeration<FileInputStream> enumeration = vector.elements();
    38         SequenceInputStream sequenceInputStream = new SequenceInputStream(enumeration);
    39         FileOutputStream fileOutputStream = new FileOutputStream("D:\合并.mp3");
    40         int length = 0;
    41         byte[] buf= new byte[1024*1024];
    42         while((length = sequenceInputStream.read(buf)) != -1){
    43             fileOutputStream.write(buf, 0, length);
    44         }
    45         fileOutputStream.close();
    46         sequenceInputStream.close();
    47     }
    48 }
    View Code
  • 相关阅读:
    元数据Metadata
    博客园如何使用MarkDown
    zookeeper集群搭建
    Java 疑问自问自答
    R中rep函数的使用
    R中unlist函数的使用
    Windows7 系统 CMD命令行,点阵字体不能改变大小以及中文乱码的问题
    C# ConfigurationManager不存在问题解决
    Servlet中的请求转发RequestDispatcher接口的forword与Include的区别
    Servlet中的乱码问题及解决办法
  • 原文地址:https://www.cnblogs.com/nicker/p/6252886.html
Copyright © 2020-2023  润新知