• Java基础知识强化之IO流笔记64:合并流SequenceInputStream


    1. SequenceInputStream合并流的概述:

    SequenceInputStream类可以将多个输入流串联在一起,合并为一个输入流,因此,该流也被称为合并流。


     

    2. SequenceInputStream的构造方法:

    SequenceInputStream(InputStream s1, InputStream s2)

    SequenceInputStream(Enumeration<? extends InputStream> e)

    3. 代码示例:

    (1)SequenceInputStream读取两个文件的内容复制到一个文件中

    以前的操作:
       a.txt -- b.txt
       c.txt -- d.txt

    现在想要:
       a.txt+b.txt -- c.txt

    使用构造方法:SequenceInputStream(InputStream s1,InputStream s2)

     1 package cn.itcast_06;
     2 
     3 import java.io.BufferedOutputStream;
     4 import java.io.FileInputStream;
     5 import java.io.FileOutputStream;
     6 import java.io.IOException;
     7 import java.io.InputStream;
     8 import java.io.SequenceInputStream;
     9 
    10 /*
    11  * 以前的操作:
    12  * a.txt -- b.txt
    13  * c.txt -- d.txt
    14  * 
    15  * 现在想要:
    16  * a.txt+b.txt -- c.txt
    17  */
    18 public class SequenceInputStreamDemo {
    19     public static void main(String[] args) throws IOException {
    20         // SequenceInputStream(InputStream s1, InputStream s2)
    21         // 需求:把ByteArrayStreamDemo.java和DataStreamDemo.java的内容复制到Copy.java中
    22         InputStream s1 = new FileInputStream("ByteArrayStreamDemo.java");
    23         InputStream s2 = new FileInputStream("DataStreamDemo.java");
    24         SequenceInputStream sis = new SequenceInputStream(s1, s2);
    25         BufferedOutputStream bos = new BufferedOutputStream(
    26                 new FileOutputStream("Copy.java"));
    27 
    28         // 如何写读写呢,其实很简单,你就按照以前怎么读写,现在还是怎么读写
    29         byte[] bys = new byte[1024];
    30         int len = 0;
    31         while ((len = sis.read(bys)) != -1) {
    32             bos.write(bys, 0, len);
    33         }
    34 
    35         bos.close();
    36         sis.close();
    37     }
    38 }

    运行效果,如下:

    (2)SequenceInputStream读取多个文件的内容复制到一个文件中

    以前的操作:
      a.txt -- b.txt
      c.txt -- d.txt
      e.txt -- f.txt

    现在想要:
      a.txt+b.txt+c.txt -- d.txt

    使用构造方法:SequenceInputStream(Enumeration<? extends InputStream> e)

     1 package cn.itcast_06;
     2 
     3 import java.io.BufferedOutputStream;
     4 import java.io.FileInputStream;
     5 import java.io.FileOutputStream;
     6 import java.io.IOException;
     7 import java.io.InputStream;
     8 import java.io.SequenceInputStream;
     9 import java.util.Enumeration;
    10 import java.util.Vector;
    11 
    12 /*
    13  * 以前的操作:
    14  * a.txt -- b.txt
    15  * c.txt -- d.txt
    16  * e.txt -- f.txt
    17  * 
    18  * 现在想要:
    19  * a.txt+b.txt+c.txt -- d.txt
    20  */
    21 public class SequenceInputStreamDemo2 {
    22     public static void main(String[] args) throws IOException {
    23         // 需求:把下面的三个文件的内容复制到Copy.java中
    24         // ByteArrayStreamDemo.java,CopyFileDemo.java,DataStreamDemo.java
    25 
    26         // SequenceInputStream(Enumeration e)
    27         // 通过简单的回顾我们知道了Enumeration是Vector中的一个方法的返回值类型。
    28         // Enumeration<E> elements():返回此向量的组件的枚举
    29         Vector<InputStream> v = new Vector<InputStream>();
    30         InputStream s1 = new FileInputStream("ByteArrayStreamDemo.java");
    31         InputStream s2 = new FileInputStream("CopyFileDemo.java");
    32         InputStream s3 = new FileInputStream("DataStreamDemo.java");
    33         v.add(s1);
    34         v.add(s2);
    35         v.add(s3);
    36         Enumeration<InputStream> en = v.elements();
    37         SequenceInputStream sis = new SequenceInputStream(en);
    38         BufferedOutputStream bos = new BufferedOutputStream(
    39                 new FileOutputStream("Copy.java"));
    40 
    41         // 如何写读写呢,其实很简单,你就按照以前怎么读写,现在还是怎么读写
    42         byte[] bys = new byte[1024];
    43         int len = 0;
    44         while ((len = sis.read(bys)) != -1) {
    45             bos.write(bys, 0, len);
    46         }
    47 
    48         bos.close();
    49         sis.close();
    50     }
    51 }

    运行效果,如下:

  • 相关阅读:
    [leetcode] Weekly Contest 170 Summary
    [Scala] java使用scala的jar包问题:Exception in thread "main" java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.Short
    [git] Updates were rejected because the tip of your current branch is behind its remote counterpart.
    [Android] Installation failed due to: ''pm install-create -r -t -S 4590498' returns error 'UNSUPPORTED''
    CTF 常见操作总结
    记项目管理大作业Web项目Mandrian的全流程[其一] 整体分析: 功能划分, 组织结构
    [leetcode] 题解记录 11-20
    [leetcode] 题解记录 1-10
    记一次配置阿里云ECS GPU计算型gn5实例
    shell脚本 入门 —— 符号篇
  • 原文地址:https://www.cnblogs.com/hebao0514/p/4876466.html
Copyright © 2020-2023  润新知