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 }
运行效果,如下: