Java IO流 --- 序列流

文章目录


流可以一个个的读取,但是有的时候,这样太麻烦,可以把流放到集合里,通过集合获取流。Java 通过 SequenceInputStream 为我们实现了这个功能,SequenceInputStream 本身不是流,它里面封装的流才是真正的流。问题是,如何判断 SequenceInputStream 的结束。

每个具体的小流以 -1 结束。每当读到 -1 时,先判断一下,还有没有下一个流,有就接着读,没有,这就是最后一个流。把最后一个流的 -1,作为整个流的 -1

1 概述

SequenceInputStream流的特点:
1 将多个字节读取流合并成一个读取流,将多个源合并成一个源,操作起来方便
2 需要的枚举接口可以通过 Collections.enumeration(collection); 来实现

2 代码示例

把 1 2 3 .txt 文件的所有内容,添加到 4.txt

分析,这是个合并动作
枚举,Vector 有枚举,但是 Vector 效率太低,不建议使用
分别用 VectorArrayList 来实现这个功能,ArrayList 没有枚举,只能自己去 new 枚举对象

Vector + SequenceInputStream

public static void main(String[] args) throws IOException {
		
		Vector<FileInputStream> v = new Vector<FileInputStream>();
		v.add(new FileInputStream("E:\\1.txt"));
		v.add(new FileInputStream("E:\\2.txt"));
		v.add(new FileInputStream("E:\\3.txt"));
		
		Enumeration<FileInputStream> en = v.elements();
		
		SequenceInputStream sis = new SequenceInputStream(en);
		FileOutputStream fos = new FileOutputStream("E:\\4.txt");
		
		byte[] buf = new byte[1024];
		int len = 0;
		while((len=sis.read(buf))!=-1){
			fos.write(buf,0,len);
		}

		fos.close();
		sis.close();
	}

ArrayList + SequenceInputStream

public static void main(String[] args) throws IOException {
		
		ArrayList<FileInputStream> al = new ArrayList<FileInputStream>();
		for(int x=1;x<=3;x++){
			al.add(new FileInputStream("E:\\"+x+".txt"));
		}
	
		Enumeration<FileInputStream> en = Collections.enumeration(al);
		
		SequenceInputStream sis = new SequenceInputStream(en);
		FileOutputStream fos = new FileOutputStream("E:\\4.txt");
		
		byte[] buf = new byte[1024];
		int len = 0;
		while((len=sis.read(buf))!=-1){
			fos.write(buf,0,len);
		}

		fos.close();
		sis.close();
	}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值