zoukankan      html  css  js  c++  java
  • SequenceInputStream

    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();
            }
        }
  • 相关阅读:
    BMP图像信息隐藏
    多项式模2运算及求逆元
    day08 xml tomcat
    day07 c3p0连接池
    day06 多表查询
    java学习日记(day30--dbutils)
    java学习日记(29 JDBC)
    java学习日记(28)-- mysql基础
    activiti主要组件解析
    activiti流程跟踪图算法
  • 原文地址:https://www.cnblogs.com/wewill/p/5588759.html
Copyright © 2011-2022 走看看