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 }
View Code
原文地址:https://www.cnblogs.com/nicker/p/6252886.html