SequenceInputStream 序列流
将多个流以集合的方式合并到一个流中
需求:
将1.txt,2.txt,3.txt中的一个数据合并到一个文件中
效率比较低的方法:
private static void lowMethod() throws IOException {
Vector<FileInputStream> v =new Vector<FileInputStream>();
v.add(new FileInputStream("1.txt"));
v.add(new FileInputStream("2.txt"));
v.add(new FileInputStream("3.txt"));
Enumeration<FileInputStream> en=v.elements();
SequenceInputStream sis =new SequenceInputStream(en);
FileOutputStream fos=new FileOutputStream("4.txt");
byte[] buf=new byte[1024];
int len=0;
while((len=sis.read(buf))!=-1){
fos.write(buf,0,len);
}
fos.close();
sis.close();//关闭集合中的所有流
}
快速的方法:
public static void beautifulMethod() throws IOException{
ArrayList<FileInputStream> al = new ArrayList<FileInputStream>();
al.add(new FileInputStream("1.txt"));
al.add(new FileInputStream("2.txt"));
al.add(new FileInputStream("3.txt"));
Enumeration<FileInputStream> en=Collections.enumeration(al);
SequenceInputStream sis =new SequenceInputStream(en);
FileOutputStream fos=new FileOutputStream("6.txt");
byte[] buf=new byte[1024];
int len=0;
while((len=sis.read(buf))!=-1){
fos.write(buf,0,len);
}
fos.close();
sis.close();//关闭集合中的所有流
}
内部实现演示:
public static void fastmethod() throws IOException{
ArrayList<FileInputStream> al = new ArrayList<FileInputStream>();
al.add(new FileInputStream("1.txt"));
al.add(new FileInputStream("2.txt"));
al.add(new FileInputStream("3.txt"));
final Iterator<FileInputStream> it=al.iterator();
Enumeration<FileInputStream> en=new Enumeration<FileInputStream>(){
@Override
public boolean hasMoreElements() {
return it.hasNext();
}
@Override
public FileInputStream nextElement() {
return it.next();
}
};
SequenceInputStream sis =new SequenceInputStream(en);
FileOutputStream fos=new FileOutputStream("5.txt");
byte[] buf=new byte[1024];
int len=0;
while((len=sis.read(buf))!=-1){
fos.write(buf,0,len);
}
fos.close();
sis.close();//关闭集合中的所有流
}