首页 > 代码库 > java 21 - 13 IO流之 合并流

java 21 - 13 IO流之 合并流

SequenceInputStream :表示其他输入流的逻辑串联。

 

构造方法摘要
SequenceInputStream(Enumeration<? extends InputStream> e)
          通过记住参数来初始化新创建的 SequenceInputStream,该参数必须是生成运行时类型为 InputStream 对象的 Enumeration 型参数。
SequenceInputStream(InputStream s1, InputStream s2)
          通过记住这两个参数来初始化新创建的 SequenceInputStream(将按顺序读取这两个参数,先读取 s1,然后读取 s2),以提供从此 SequenceInputStream 读取的字节。

 

首先演示第二个构造方法:

 SequenceInputStream(InputStream s1, InputStream s2)

需求:把2个文件的内容复制到另1个文件中
  以前的操作:
    a.txt -- b.txt
    c.txt -- d.txt
  现在想要:
    a.txt+b.txt -- c.txt

 1 public static void main(String[] args) throws IOException { 2         // 把DataStreamDemo.java和user.txt合并成Copy.txt 3          4         //首先封装2个文件,由于SequenceInputStream(InputStream s1, InputStream s2)需要的参数列表是InputStream类的 5         //FileInputStrem是InputStream的子类,使用多态: 6         InputStream in1 = new FileInputStream("DataStreamDemo.java"); 7         InputStream in2 = new FileInputStream("user.txt"); 8         //把这两个文件放进SequenceInputStream中 9         SequenceInputStream in = new SequenceInputStream(in1, in2);10         11         //封装目的地12         BufferedOutputStream bw = new BufferedOutputStream(new FileOutputStream("Copy.txt"));13         //读取in1和in2的数据,并写入in中14         byte[] by = new byte[1024];15         int len = 0;16             while((len = in.read(by)) != -1){17                 bw.write(by,0,len);18             }    19             in1.close();20             in2.close();21             bw.close();22             in.close();23         24     }

 

3、演示第一种构造方法:

SequenceInputStream(Enumeration e)
  通过简单的回顾我们知道了Enumeration是Vector中的一个方法的返回值类型。
  Enumeration<E> elements()

需求:把3个文件的数据复制到另一个文件中
  以前的操作:
    a.txt -- b.txt
    c.txt -- d.txt
    e.txt -- f.txt
  现在想要:
    a.txt+b.txt+c.txt -- d.txt

 1     public static void main(String[] args) throws IOException { 2         //SequenceInputStream(Enumeration e)需要的是Enumeration 3         //而Enumeration是Vector中的一个方法的返回值类型。Enumeration<E> elements() 4         //所以就要实现这个方法。 5  6         //首先定义一个Vector对象 7         Vector<InputStream> v = new Vector<InputStream>(); 8         InputStream i1 = new FileInputStream("pw.txt"); 9         InputStream i2 = new FileInputStream("user.txt");10         InputStream i3 = new FileInputStream("DataStreamDemo.java");11         12         //把这三个文件添加到Vector13         v.add(i1);14         v.add(i2);15         v.add(i3);16         //实现Vector的这个方法,得到Enumeration17         Enumeration<InputStream> e = v.elements();18         //得到以后就可以使用下面这个方法,这样的话,3个文件中的数据就存储在si中了19         SequenceInputStream si = new SequenceInputStream(e);20         21         //建立输入流22         BufferedOutputStream bo = new BufferedOutputStream(new FileOutputStream("Copy.txt"));23         24         //读取Vertor的数据,再添加到Copy.txt中25         byte[] by = new byte[1024];26         int len = 0;27         while((len = si.read(by)) != -1){28             bo.write(by,0,len);29         }30         si.close();31         bo.close();32     }

 

java 21 - 13 IO流之 合并流