代码改变世界

SequenceInputStream

2015-12-03 17:22  v_ZSW  阅读(378)  评论(0编辑  收藏  举报

SequenceInputStream从名字上看, 他是一个序列字节输入流
既然是个序列
那么意味着 SequenceInputStream装着许多的输入流
所以
可以用他来合并文件

SequenceInputStream的主要方法

SequenceInputStream构造方法

new SequenceInputStream(Enumeration)
接受一个输入流泛型的枚举

然后怎么创建枚举呢??

Vector.elements():Enumeration
Vector继承自AbstractArrayList 所以创建和填充Vector的方法和创建Collection的方法一样

read(byte []array)
availabe():负责提供数组的长度
既然是输入流,当然也会有read()方法啦
还可以BufferredReader(new InputStreamReader(new SequenceInputStream(enum)))
然后使用readLine()方法
读的方法如果读完了一个流 会自动跳到下一个流!!

关流刷新

flush();
close();


实际应用

可用于将多个文件合并为一个文件
如:
看连载小说的时候是一章章的出,最后要整理成一本,那么就用到SequenceInputStream
某某视频网站的缓冲视频在本地是分段的文件,那这时看起来就很不爽啦,就可以用SequenceInputStream合并
tips:处理大文件的时候,小心数组长度超出了限度

下面做一个将lang包里面的java文件连在一起

package mypackage;
import java.io.*;
import java.util.*;
public class CombineNovel{
    public static void main(String[] args)throws IOException{
        Vector<InputStream> vectory=new Vector<InputStream>();
        //关联目录
        File directory=new File("C:\\Program Files\\Java\\jdk1.8.0_60\\src\\java\\lang");
        //取出java文件的字符串数组
        String[] javasname=directory.list(new FilenameFilter(){
            //匿名内部类实现FilenameFilter接口
            private boolean isJava(String filename){
                return filename.toLowerCase().endsWith(".java");
                }
            public boolean accept(File file,String name){
                return this.isJava(name);
                }
            });
        //填充容器
        for(String filename:javasname){
            vectory.add(new FileInputStream("C:\\Program Files\\Java\\jdk1.8.0_60\\src\\java\\lang\\"+filename));
            }
        //生成枚举
        Enumeration enumeration=vectory.elements();
        //生成SequenceInputStream
        SequenceInputStream sis=new SequenceInputStream(enumeration);
        //缓冲技术提高效率
        BufferedInputStream bis=new BufferedInputStream(sis);
        //建立目的地输出流
        BufferedOutputStream bos=new BufferedOutputStream(new FileOutputStream("all_lang.java"));
        int len=0;
        while((len=bis.read())!=-1){
            bos.write(len);
            }
        bis.close();
        bos.close();
        }
    }