序列流:
一、 API声明:
compact1, compact2, compact3
java.io
Class SequenceInputStream
- java.lang.Object
- java.io.InputStream
- java.io.SequenceInputStream
All Implemented Interfaces:
public class SequenceInputStream extends InputStreamA
SequenceInputStream
表示其他输入流的逻辑级联。 它从一个有序的输入流集合开始,从第一个读取到文件的结尾,然后从第二个文件读取,依此类推,直到最后一个输入流达到文件的结尾。从以下版本开始:
JDK1.0
二、作用示意图:
三、需求:将1.txt 2.txt 3.txt文件中的数据合并到一个文件中。
四、代码实现
public static void main(String[] args) 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();
}
1.txt中数据。2、3 类似。
合并后的4.txt
由于Vertor是线程安全的,效率慢,所以为了提高速度,改为ArrayList。
private static void mergeFile() throws IOException {
ArrayList<FileInputStream> al= new ArrayList<FileInputStream>();
//添加三个文件
for (int i=1;i<=3;i++){
al.add(new FileInputStream(i+".txt"));
}
Enumeration<FileInputStream> enumeration = Collections.enumeration(al);
SequenceInputStream sis = new SequenceInputStream(enumeration);
FileOutputStream fos = new FileOutputStream("1234.txt");
byte[] buf = new byte[1024];
int len = 0;
while((len=sis.read(buf))!=-1){
fos.write(buf,0,len);
}
fos.close();
sis.close();
}