这个类的作用是将多个输入流合并成一个输入流,通过SequenceInputStream类包装后形成新的一个总的输入流
1.SequenceInputStream(InputStream s1,InputStream s2)和SequenceInputStream(Enumeration<? extends InputStream> e)
第一个构造方法只能将两个输入流合并成一个总的输入流(SequenceInputStream),而第二个构造方法通过Enumeration枚举可以由vector集合添加多个输入流,从而可以将更多的输入流合并成一个总的输入流
这里的Enumeration与Iterator迭代器是一样的效果,将Vector集合中的元素枚举出来
(1)例:我在不同地方建立多个文件,通过多个流来读取后,在通过SequenceInputStream合并他们形成一个新的输入流
<span style="font-size:14px;">public static void main(String[] args)throws Exception{
Vector<InputStream> vector = new Vector<InputStream>();
vector.add(new FileInputStream("c:\\zhang.txt"));
vector.add(new FileInputStream("c:\\wangwu.txt"));
vector.add(new FileInputStream("d:\\lisi.txt"));
//将vector集合中的元素保存到枚举中去
Enumeration<InputStream> e = vector.elements();
SequenceInputStream sis = new SequenceInputStream(e);
FileOutputStream out = new FileOutputStream(new File("f:\\person.txt"));
byte[] b = new byte[1024];
int length = -1;
while((length = sis.read(b))!=-1){
out.write(b,0,length);
}
sis.close();
out.close();
}
</span>
2.int read()和read(byte[] b)方法
因为也是字节输入流,所以操作的也是字节流对象,所以也有这两个常用的方法
3.close()方法
这个方法关闭的是合并的所有流
有文件的合并,就有文件的切割,文件的切割可以在循环中进行new出输出流对象,事先定义一个指定大小的数组,不过这个数组是有大小规定的,如果太大就会内存溢出
例:
public class TestFile{
public static void main(String[] args)throws Exception{
marge();
}
//分割方法
public static void split()throws Exception{
FileInputStream fis = new FileInputStream("c:\\1.avi");
FileOutputStream fos = null;
byte[] b = new byte[1024*1024*10];//10M
int length = -1;
int count = 1;
while((length = fis.read(b))!=-1){
//每个文件10M
fos = new FileOutputStream("c:\\"+(count++)+".part");
fos.write(b,0,length);
fos.close();
}
fis.close();
}
//合并方法
public static void marge()throws Exception{
ArrayList<InputStream> list = new ArrayList<InputStream>();
list.add(new FileInputStream("c:\\1.part"));
list.add(new FileInputStream("c:\\2.part"));
//因为在匿名函数中访问,所以需要final修饰
final Iterator<InputStream> iterator = list.iterator();
Enumeration<InputStream> e = new Enumeration<InputStream>(){
public boolean hasMoreElements(){
return iterator.hasNext();
}
public InputStream nextElement(){
return iterator.next();
}
};
SequenceInputStream sis = new SequenceInputStream(e);
FileOutputStream fos = new FileOutputStream("c:\\3.avi");
byte[] b = new byte[1024];
int length = -1;
while((length = sis.read(b))!=-1){
fos.write(b,0,length);
}
sis.close();
fos.close();
}
}