SequenceInputStream----合并流

原创 2013年12月04日 16:43:02

这个类的作用是将多个输入流合并成一个输入流,通过SequenceInputStream类包装后形成新的一个总的输入流

1.SequenceInputStream(InputStream s1,InputStream s2)和SequenceInputStream(Enumeration<? extends InputStream> e)

     第一个构造方法只能将两个输入流合并成一个总的输入流(SequenceInputStream),而第二个构造方法通过Enumeration枚举可以由vector集合添加多个输入流,从而可以将更多的输入流合并成一个总的输入流
     这里的Enumeration与Iterator迭代器是一样的效果,将Vector集合中的元素枚举出来
       
     (1)例:我在不同地方建立多个文件,通过多个流来读取后,在通过SequenceInputStream合并他们形成一个新的输入流

<span style="font-size:14px;">public static void main(String[] args)throws Exception{
          Vector<InputStream> vector = new Vector<InputStream>();
          vector.add(new FileInputStream("c:\\zhang.txt"));
          vector.add(new FileInputStream("c:\\wangwu.txt"));
          vector.add(new FileInputStream("d:\\lisi.txt"));
          //将vector集合中的元素保存到枚举中去
          Enumeration<InputStream> e = vector.elements();
          SequenceInputStream sis = new SequenceInputStream(e);
          FileOutputStream out = new FileOutputStream(new File("f:\\person.txt"));
         
          byte[] b = new byte[1024];
          int length = -1;
          while((length = sis.read(b))!=-1){
               out.write(b,0,length);
          }
          sis.close();
          out.close();
     } 
</span>

2.int  read()和read(byte[] b)方法
     因为也是字节输入流,所以操作的也是字节流对象,所以也有这两个常用的方法
     

3.close()方法
     这个方法关闭的是合并的所有流


有文件的合并,就有文件的切割,文件的切割可以在循环中进行new出输出流对象,事先定义一个指定大小的数组,不过这个数组是有大小规定的,如果太大就会内存溢出
     例:
public class TestFile{
     public static void main(String[] args)throws Exception{
          marge();
     }
    
     //分割方法
     public static void split()throws Exception{
          FileInputStream fis = new FileInputStream("c:\\1.avi");
          FileOutputStream fos = null;
          byte[] b = new byte[1024*1024*10];//10M
          int length = -1;
          int count = 1;
          while((length = fis.read(b))!=-1){
               //每个文件10M
               fos = new FileOutputStream("c:\\"+(count++)+".part");
               fos.write(b,0,length);
               fos.close();
          }
          fis.close();
     }
    
     //合并方法
     public static void marge()throws Exception{
          ArrayList<InputStream> list = new ArrayList<InputStream>();
          list.add(new FileInputStream("c:\\1.part"));
          list.add(new FileInputStream("c:\\2.part"));
         
          //因为在匿名函数中访问,所以需要final修饰
          final Iterator<InputStream> iterator = list.iterator();
          Enumeration<InputStream> e = new Enumeration<InputStream>(){
               public boolean hasMoreElements(){
                    return iterator.hasNext();
               }
               public InputStream nextElement(){
                    return iterator.next();
               }
          };
          SequenceInputStream sis = new SequenceInputStream(e);
          FileOutputStream fos = new FileOutputStream("c:\\3.avi");
          byte[] b = new byte[1024];
          int length = -1;
          while((length = sis.read(b))!=-1){
               fos.write(b,0,length);
          }
          sis.close();
          fos.close();
     }
    
}



版权声明:本文为博主原创文章,未经博主允许不得转载。

java_IO流之SequenceInputStream合并流的使用

有些情况下,当我们需要从多个输入流中向程序读入数据。此时,可以使用合并流,将多个输入流合并成一个SequenceInputStream流对象。  SequenceInputStream会将与之相连接...

SequenceInputStream 合并流 与 切割流

将多个流合并成一个流 SequenceInputStream(Enumeration e) SequenceInputStream(InputStream s1, InputStream s2) ...
  • huivs12
  • huivs12
  • 2012年07月13日 17:20
  • 300

Java IO操作——合并流SequenceInputStream的使用

学习目标  掌握合并流的使用 合并流:从概念上讲就是内容合并在一起了。 一般合并流的主要功能就是将两个文件的内容合并成一个文件 主要操作的是内容 类的定义 :java.lan...

黑马程序员——SequenceInputStream流将分割后的文件进行合并

/* 此程序是将一个文件进行切割,切割没有对应的流,只能通过下面的代码来完成。然后通过SequenceInputStream流将分割后的文件进行合并。 此程序的另外一个牛逼之处在于...

java 合并流SequenceInputStream

java 合并流SequenceInputStream

SequenceInputStream合并流

SequenceInputStream public SequenceInputStream(EnumerationInputStream> e) 通过记住参数来初始化新创建的 SequenceI...

【java编程】IO流之SequenceInputStream类合并输入流再输出

先上一张图片,大致说明一下SequenceInputStream的工作原理。。 /*思路:1.将三个流通过SequenceInputream合并成一个流 2.因为SequenceIn...
  • KFCKA
  • KFCKA
  • 2015年03月12日 21:27
  • 838

第22天 SequenceInputStream、合并切割、对象的输入输出流、Properties配置文件、.printStream、编码与解码、转换流、递归

SequenceInputStream、合并切割、对象的输入输出流、Properties配置文件、.printStream、编码与解码、转换流、递归...

【Java基础知识】IO流--SequenceInputStream 合并流

1. SequenceInputStream概述及应用场景SequenceInputStream 表示其他输入流的逻辑串联。它从输入流的有序集合开始,并从第一个输入流开始读取,直到到达文件末尾,接着从...

IO流 合并流 SequenceInputStream

//IO流 合并流 SequenceInputStream import java.io.*; import java.uitl.*; class SequenceDemo { public...
  • blacop
  • blacop
  • 2016年07月29日 22:05
  • 162
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:SequenceInputStream----合并流
举报原因:
原因补充:

(最多只允许输入30个字)