IO中的SequenceInputStream可用于对字节流的合并,至于它的详细功能我就不解释了,坛里高手云集,多说就是班门弄斧了。
废话不多说,上代码,问题在代码中的注释里面:
代码里的方法,是将多个被拆分后的文件进行合并。
import java.io.*;
import java.util.*;
class SplitFile
{
public static void main(String[] args) throws IOException
{
//splitFile();
merge();
}
public static void merge() throws IOException
{
ArrayList<FileInputStream> al = new ArrayList<FileInputStream>();
for(int i=1;i<=4;i++)
{
al.add(new FileInputStream("d:\\zz\\part"+i+".part"));
}
//毕向东老师在说这个地方的时候,就是下面这句话一语带过,但我还是我没搞明白为啥下面的这个迭代器必须要用final修饰
//如果不用final修饰将会怎样? 求详细点的解释????
//因为下面使用的是匿名内部类,所以要对返回的局部变量使用final修饰
final Iterator<FileInputStream> it = al.iterator();
Enumeration<FileInputStream> en = new Enumeration<FileInputStream>()
{
public boolean hasMoreElements()
{
return it.hasNext();
}
public FileInputStream nextElement()
{
return it.next();
}
};
SequenceInputStream sis = new SequenceInputStream(en);
FileOutputStream fos = new FileOutputStream("d:\\zz\\1.avi");
byte[] buf = new byte[1024*20];
int len = 0;
while((len=sis.read(buf))!=-1)
{
fos.write(buf,0,len);
}
fos.close();
sis.close();
}
}
|
|