zoukankan      html  css  js  c++  java
  • Java之序列流SequenceInputStream

    序列流:作用就是将多个读取流合并成一个读取流,实现数据的合并

      序列流表示其他输入流的逻辑串联。它从输入流的有序集合开始,并从第一个输入流开始读取,直到文件的末尾,接着从第二个输入流读取,以此类推;这样做,可以方便的操作多个读取流,其实在这个序列流的内部有一个 有序的集合容器,用于存储多个读取流对象

          序列流的构造函数参数是枚举,想要获取枚举,需要有Vector集合,因为Vector的elment()方法返回一个指定Collection的枚举。

          实现 Enumeration 接口的对象,它生成一系列元素,一次生成一个。连续调用 nextElement 方法将返回一系列的连续元素。

          例如,要输出 Vector<E> v 的所有元素,可使用以下方法:

        for (Enumeration<E> e = v.elements(); e.hasMoreElements();)
           System.out.println(e.nextElement());
    但是Vector因为同步的原因,效率不高,使用ArrayList,但其没有枚举,所以要自己去实现枚举,只有自己去创建枚举对象。由上面的代码可以看到枚举和迭代器的功能是一样的,所以可以使用迭代替换枚举。

    具体代码实现如下:
     1 package FileDemo;
     2 
     3 import java.awt.List;
     4 import java.io.FileInputStream;
     5 import java.io.FileOutputStream;
     6 import java.io.IOException;
     7 import java.io.SequenceInputStream;
     8 import java.util.ArrayList;
     9 import java.util.Collections;
    10 import java.util.Enumeration;
    11 import java.util.Iterator;
    12 import java.util.Vector;
    13 
    14 public class SequenceInputStreamDemo {
    15 
    16     /**
    17      * @param args
    18      * @throws IOException
    19      */
    20     public static void main(String[] args) throws IOException {
    21 
    22         ArrayList<FileInputStream> v = new ArrayList<FileInputStream>();
    23         v.add(new FileInputStream("1.txt"));
    24         v.add(new FileInputStream("2.txt"));
    25         v.add(new FileInputStream("3.txt"));
    26         Enumeration<FileInputStream> en = Collections.enumeration(v);
    27         // v.add(new FileInputStream("4.txt"));
    28         // final Iterator<FileInputStream> it=v.iterator();
    29         /*
    30          * Enumeration<FileInputStream> en=new Enumeration<FileInputStream>() {
    31          * 
    32          * @Override public boolean hasMoreElements() {
    33          * 
    34          * return it.hasNext(); }
    35          * 
    36          * @Override public FileInputStream nextElement() {
    37          * 
    38          * return it.next(); } };
    39          */
    40         SequenceInputStream sis = new SequenceInputStream(en);
    41         FileOutputStream fos = new FileOutputStream("12345.txt");
    42         byte buf[] = new byte[1024];
    43         int len = 0;
    44         while ((len = sis.read(buf)) != -1) {
    45             fos.write(buf, 0, len);
    46         }
    47         fos.close();
    48         sis.close();
    49     }
    50 
    51 }
  • 相关阅读:
    IBinder在进程之间传递一个对象的形式(一)
    Xaml在string(串)定义常量和处理空间
    c 有意思的数组初始化
    C 文件直接包含
    [面试技巧]16个经典面试问题回答思路
    centos6安装bt工具transmission
    clearcase 中一些概念和操作
    C/C++ Resources
    Linux I/O 重定向详解及应用实例
    c/c++ 直接使用动态库 dlopen
  • 原文地址:https://www.cnblogs.com/ysw-go/p/5307129.html
Copyright © 2011-2022 走看看