摘要: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演示。
本文介绍如何使用SequenceInputStream将多个文件的数据合并到一个文件中。通过两种方式实现:一是利用字节数组缓存,二是利用BufferedInputStream和BufferedOutputStream进行高效读写。
1030

被折叠的 条评论
为什么被折叠?



