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 }

运行效果,如下:

原文地址:https://www.cnblogs.com/hebao0514/p/4876466.html