IO(三)----序列流
SequenceInputStream
表示其他输入流的逻辑串联。它从输入流的有序集合开始,并从第一个输入流开始读取,直到到达文件末尾,接着从第二个输入流读取,依次类推,直到到达包含的最后一个输入流的文件末尾为止。
常用方法:
1、构造方法
SequenceInputStream(InputStream s1, InputStream s2)
通过记住这两个参数来初始化新创建的 SequenceInputStream
(将按顺序读取这两个参数,先读取 s1
,然后读取 s2
),以提供从此 SequenceInputStream
读取的字节。
SequenceInputStream(Enumeration<? extends InputStream> e)
通过记住参数来初始化新创建的 SequenceInputStream
,该参数必须是生成运行时类型为 InputStream
对象的 Enumeration
型参数。
2、读取方法
int read(byte[] b, int off, int len)
将最多 len
个数据字节从此输入流读入 byte 数组。
int read()
从此输入流中读取下一个数据字节。
3、关闭资源
void close()
关闭此输入流并释放与此流关联的所有系统资源。
常用操作就是合并读取
示例代码:

1 // 需求: 把一首mp3先切割成n份,然后再把这些文件合并起来。 2 public class DemoSequenceInputStream { 3 4 public static void main(String[] args) throws IOException { 5 // split(); 6 merage(); 7 } 8 9 //分隔 10 public static void split() throws IOException{ 11 File inFile = new File("D:\\西单女孩-原点 (3D武侠动画《画江湖之不良人》主题曲).mp3"); 12 FileInputStream fileInputStream = new FileInputStream(inFile); 13 byte[] buf = new byte[1024*1024]; 14 int length = 0; 15 for(int i = 0; (length = fileInputStream.read(buf)) != -1;i++){ 16 File outFile = new File("D:\\SplitMusic\\","part"+i+".mp3"); 17 FileOutputStream fileOutputStream = new FileOutputStream(outFile); 18 fileOutputStream.write(buf, 0, length); 19 fileOutputStream.close(); 20 } 21 fileInputStream.close(); 22 } 23 24 //合并 25 public static void merage() throws IOException{ 26 File dir = new File("D:\\SplitMusic"); 27 File[] files = dir.listFiles(); 28 //对数据进行排序 29 Arrays.sort(files); 30 Vector<FileInputStream> vector = new Vector<>(); 31 for (File file : files) { 32 if (file.getName().endsWith(".mp3")) { 33 FileInputStream fileInputStream = new FileInputStream(file); 34 vector.add(fileInputStream); 35 } 36 } 37 Enumeration<FileInputStream> enumeration = vector.elements(); 38 SequenceInputStream sequenceInputStream = new SequenceInputStream(enumeration); 39 FileOutputStream fileOutputStream = new FileOutputStream("D:\\合并.mp3"); 40 int length = 0; 41 byte[] buf= new byte[1024*1024]; 42 while((length = sequenceInputStream.read(buf)) != -1){ 43 fileOutputStream.write(buf, 0, length); 44 } 45 fileOutputStream.close(); 46 sequenceInputStream.close(); 47 } 48 }
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步