Java之序列流SequenceInputStream
2016-03-22 16:24
531 查看
序列流:作用就是将多个读取流合并成一个读取流,实现数据的合并
序列流表示其他输入流的逻辑串联。它从输入流的有序集合开始,并从第一个输入流开始读取,知道文件的末尾,接着从第二个输入流读取,以此类推;这样做,可以方便的操作多个读取流,其实在这个序列流的内部有一个 有序的集合容器,用于存储多个读取流对象
序列流的构造函数参数是枚举,想要获取枚举,需要有Vector集合,因为Vector的elment()方法返回一个指定Collection的枚举。
实现 Enumeration 接口的对象,它生成一系列元素,一次生成一个。连续调用
例如,要输出 Vector<E> v 的所有元素,可使用以下方法:
序列流表示其他输入流的逻辑串联。它从输入流的有序集合开始,并从第一个输入流开始读取,知道文件的末尾,接着从第二个输入流读取,以此类推;这样做,可以方便的操作多个读取流,其实在这个序列流的内部有一个 有序的集合容器,用于存储多个读取流对象
序列流的构造函数参数是枚举,想要获取枚举,需要有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 }
相关文章推荐
- UIMenuController使用
- UIPasteboard 粘贴板
- iOS开发中设置UITableViewCell选中时的颜色
- hdu1711 Number Sequence 求模式串在主串中的位置
- 开关控件 UISwitch
- Building Android Kernel for the Nexus 5 — AOSP(6.0.1)
- 在ios7及以上系统中在UINavigationBar中添加UITextField或者UISearchbar时不显示输入光杆问题及解决
- 多个模型 在 tableview
- UISegmentedControl UISlider
- UIButton中setTitleEdgeInsets和setImageEdgeInsets的使用
- uiui
- [Leetcode]Binary Tree Longest Consecutive Sequence
- No 'Access-Control-Allow-Origin' header is present on the requested resource
- Ruiy自我识人做事领悟录ing
- ios开发基础——UIImageView
- UI常用控件和属性
- 如何编译UE4的NXGI引擎
- UITextView文字怎样居上
- (转)使用Servlet3.0新特性asyncSupported=true时抛异常java.lang.IllegalStateException: Not support...
- FineUI Gird单元格编辑 保存新增的一行到数据库 LINQ