• Java学习之IO流(序列流--SequenceInputStream)


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

    构造函数

      SequenceInputStream​(InputStream s1, InputStream s2)
      SequenceInputStream​(Enumeration<? extends InputStream> e)

    实例:

     1     //将1.txt,2.txt,3.txt文件合并到一个文件中
     2     /*
     3      * 方式一、Vector集合是可行的,但效率低
     4      */
     5     /* Vector<FileInputStream> vector=new Vector<FileInputStream>();
     6     vector.add(new FileInputStream("1.txt"));
     7     vector.add(new FileInputStream("2.txt"));
     8     vector.add(new FileInputStream("3.txt"));
     9     Enumeration<FileInputStream> en=vector.elements();
    10     SequenceInputStream ss=new SequenceInputStream(en); */
    11     
    12     /*
    13      * 方式二、使用ArrayList集合效率高
    14      * 使用集合工具类Collections.enumeration方法将ArrayList集合转成Enumeration<FileInputStream>型对象
    15      */
    16     
    17     ArrayList<FileInputStream> arr=new ArrayList<FileInputStream>();
    18     
    19     arr.add(new FileInputStream("1.txt"));
    20     arr.add(new FileInputStream("2.txt"));
    21     arr.add(new FileInputStream("3.txt"));
    22     SequenceInputStream ss1=new SequenceInputStream(Collections.enumeration(arr));
    23     /*
    24      * Collections.enumeration(arr)的实现原理:
    25      * 
    26      * Enumeration API note:The functionality of this interface is duplicated by the Iterator interface
    27      * 翻译:该接口的功能被Iterator接口复制
    28      * 
    29      * final Iterator<FileInputStream> it=arr.iterator();
    30      * SequenceInputStream ss1=new SequenceInputStream(new Enumeration<InputStream>() {
    31                 @Override
    32                 public boolean hasMoreElements() {
    33                 
    34                 return it.hasNext();
    35                 }
    36         
    37                 @Override
    38                 public InputStream nextElement() {
    39                 
    40                 return it.next();
    41                 }
    42         });
    43      */
    44     byte[] buff=new byte[1024];
    45     FileOutputStream out=new FileOutputStream("4.txt");
    46     int len=0;
    47     while((len=ss1.read(buff))!=-1) {
    48         out.write(buff,0,len);
    49     }
    50     out.close();
    51     
    52     ss1.close();
    53     

    文件切割实例:

     1     public static void splitFile(File file) throws IOException {
     2     // 用读取流关联文件
     3     FileInputStream fis = new FileInputStream(file);
     4 
     5     // 定义一个1M的缓冲区
     6     byte[] buf = new byte[SIZE];
     7 
     8     // 创建目的
     9     FileOutputStream fos = null;
    10 
    11     int len = 0;
    12     int count = 1;
    13     File dir = new File("partfiles");
    14 
    15     if (!dir.exists()) {
    16         dir.mkdirs();
    17     }
    18 
    19     while ((len = fis.read(buf)) != -1) {
    20         fos = new FileOutputStream(new File(dir, (count++) + ".part"));
    21         fos.write(buf,0,len);
    22     }
    23     fos.close();
    24     fis.close();
    25     }
  • 相关阅读:
    k8s中负载均衡器【ingress-nginx】部署
    利用procedure批量插入数据
    一次socket.error: [Errno 99] Cannot..报错排查
    k8s使用Job执行任务失败了怎么办
    采坑指南——k8s域名解析coredns问题排查过程
    如何批量删除k8s资源对象
    史上最全docker基础知识汇总
    docker镜像制作必备技能
    kubernetes垃圾回收器GarbageCollector源码分析(一)
    python标准库-日志logging
  • 原文地址:https://www.cnblogs.com/WarBlog/p/12141611.html
Copyright © 2020-2023  润新知