摘要:SequenceInputStream叫序列流,可以整合多个输入流到一个大流。
输出的时候我提供了两种方式:方式一,字节流通过数组缓存;方式二,字节流通过缓冲区缓存。两种方式都必须掌握!
package sequence; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.SequenceInputStream; import java.util.ArrayList; import java.util.Collections; import java.util.Enumeration; public class SequenceDemo { /* * 需求:将1.txt 2.txt 3.txt文件中的数据合并到一个文件中。 * 方法:采用SequenceInputStream整合这几个输入流,合成一个大流,然后再输出到一个文件中。 */ public static void main(String[] args) throws IOException { //首先是创建三个文件 File file1=new File("1.txt"); if(!file1.exists()) file1.createNewFile(); File file2=new File("2.txt"); if(!file2.exists()) file2.createNewFile(); File file3=new File("3.txt"); if(!file3.exists()) file3.createNewFile(); //将这个几个输入流存入ArrayList集合中 ArrayList<FileInputStream> al=new ArrayList<>(); for(int i=1;i<=3;i++) { al.add(new FileInputStream(i+".txt")); } /*因为SequnenceInputStream构造器中,但需要两个以上的流合成一个流时需采用SequenceInputStream(Enumeration<? extends InputStream> e) * 如果只是需要整合两个输入流,可采用SequenceInputStream(InputStream s1, InputStream s2)构造方法,更简单。 * 所以,我们现在就需要构建一个Enumeration,Collections集合工具类中有个泛型方法:enumeration(Collection<T> c) 可得到Enumeration. */ Enumeration<FileInputStream> en=Collections.enumeration(al); SequenceInputStream sis=new SequenceInputStream(en); /* * 接下来就是对大输入流中的数据进行读入,并马上向输出流中进行存储。 * 为了提高效率,这儿采用了数组作为读入的缓冲区,当然还可以采用字节输入输出缓冲! * 字节输入输出缓冲采用BufferedInputStream和BufferedOutputStream。 */ FileOutputStream fos=new FileOutputStream("sequence.txt"); byte[] buf=new byte[1024]; int len=0; while((len=sis.read(buf))!=-1) { fos.write(buf,0,len); } sis.close(); fos.close(); //***********下面演示采用字节输入输出缓冲来进行字节读写的操作*********************************** //上面的方法是靠数组来缓存的,下面的方法是靠缓冲区来缓存的,两个方法选择其一即可 //目的都是为了提高对文件的输入输出读写速度,两种方法都必须熟练掌握! //可参加我的另一篇文章:http://blog.csdn.net/topdandan/article/details/78461072 SequenceInputStream sis1=new SequenceInputStream(en); FileOutputStream fos1=new FileOutputStream("sequence1.txt"); BufferedInputStream bfi=new BufferedInputStream(sis1); BufferedOutputStream bfo=new BufferedOutputStream(fos1); int len1=0; while((len1=bfi.read())!=-1) { bfo.write(len1); } bfi.close(); bfo.close(); } }注意:若想了解更多有关字节流的IO操作,请点击我的另一篇文章: 采用字节流的IO演示。