java组合流或者合并流SequenceInputStream

1,我们以前学习的流都是一个一个的处理,有时候我们可能遇到这种情况,我们要在程序里使用多个输入流,并按顺序将他们输入的数据输出到一个文件中,这种情况下,如果我们一个一个处理输入流,那可能显得效率不是那么高

 

2,合并流可以讲多个输入流合并到一起集中处理,我们只需要创建一个一个的输入流,并将他们加入到合并流中,之后可以像处理一个流那样来处理合并流,方便很多。


String line = null;
		StringBuffer sb = new StringBuffer();
		try {
			Process process = Runtime.getRuntime().exec(command);
			SequenceInputStream sis = new SequenceInputStream(process.getInputStream(), process.getErrorStream());
			InputStreamReader isr = new InputStreamReader(sis, "utf-8");
			BufferedReader br = new BufferedReader(isr);
			while (null != (line = br.readLine())) {
				//System.out.println(line);
				sb.append(line);
			}
			line=sb.toString();
			
			process.destroy();
			br.close();
			isr.close();
		} catch (IOException e) {
			e.printStackTrace();
		}

 

当我们只有两个输入流加入到合并流时,我们可以直接将两个合并流的引用当做两个参数传递给合并流的构造函数。

    如:SequenceInputStream sis=new SequenceInputStream(fis1,fis2);

     但如果我们有超过两个输入流需要加入到合并之后,就不能直接传递输入流的引用到合并流,我们需要将输入流封装到一个枚举类型的对象中,将该对象的引用传递给合并流的构造函数

         ArrayList al=new ArrayList();
          al.add(fis1);
          al.add(fis2);
          al.add(fis3);

          Enumeration en=Collections.enumeration(al);

          SequenceInputStream sis=new SequenceInputStream(en);


posted @ 2022-01-27 18:37  zhangdaopin  阅读(517)  评论(0编辑  收藏  举报