合并流:
SequenceInputStream:
表示其他输入流的逻辑串联。它从输入流的有序集合开始,并从第一个输入流开始读取,直到到达文件末尾,接着从第二个输入流读取,以此类推,知道到达包含的最后一个输入流的文件末尾为止。
代码示例:
package com.lemon;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.SequenceInputStream;
import java.util.Enumeration;
import java.util.Vector;
/**
* 文件合并:
*
* @author lemonSun
*
* 2019年5月6日上午9:17:39
*/
public class FileDivisionMergeDemo {
public static void main(String[] args) {
// 合并
try {
InputStream in1 = new FileInputStream(new File("F:\\javatest\\1-temp123.mp4"));
InputStream in2 = new FileInputStream(new File("F:\\javatest\\2-temp123.mp4"));
InputStream in3 = new FileInputStream(new File("F:\\javatest\\3-temp123.mp4"));
InputStream in4 = new FileInputStream(new File("F:\\javatest\\4-temp123.mp4"));
Vector<InputStream> v = new Vector<InputStream>();
v.add(in1);
v.add(in2);
v.add(in3);
v.add(in4);
Enumeration<InputStream> es = v.elements();
// 合并
merge(es, "F:\\javatest\\测试合并123.mp4");
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
/*
* 文件合并
*/
private static void merge(Enumeration<InputStream> es, String mergeFile) {
try {
// 合并流 输入
SequenceInputStream sis = new SequenceInputStream(es);
// 缓冲流 输出
BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(mergeFile));
byte[] bytes = new byte[1024];
int len = -1;
while ((len = sis.read(bytes)) != -1) {
out.write(bytes, 0, len);
out.flush();
}
out.close();
sis.close();
System.out.println("合并完成");
} catch (IOException e) {
e.printStackTrace();
}
}
}