黑马程序员-----IO之序列流SequenceInputStream
2014-01-13 16:53
417 查看
----------------------
ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ----------------------
SequenceInputStream表示其他输入流的逻辑串联。它从输入流的有序集合开始,并从第一个输入流开始读取,直到到达文件末尾,接着从第二个输入流读取,依次类推,直到到达包含的最后一个输入流的文件末尾为止。
构造器:
SequenceInputStream(Enumeration<? extends InputStream> e):通过记住参数来初始化新创建的SequenceInputStream,该参数必须是生成运行时类型为InputStream对象的Enumeration型参数。
SequenceInputStream(InputStream s1, InputStream s2):通过记住这两个参数来初始化新创建的SequenceInputStream(将按顺序读取这两个参数,先读取s1,然后读取s2),以提供从此SequenceInputStream读取的字节。
方法:
int read():从此输入流中读取下一个数据字节。
int read(byte[] b, int off, int len):将最多len个数据字节从此输入流读入byte数组。
使用序列流将多个文件合并为一个文件
对一个图片进行切割,然后在合并。
----------------------
ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ----------------------详细请查看:http://edu.csdn.net
ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ----------------------
SequenceInputStream表示其他输入流的逻辑串联。它从输入流的有序集合开始,并从第一个输入流开始读取,直到到达文件末尾,接着从第二个输入流读取,依次类推,直到到达包含的最后一个输入流的文件末尾为止。
构造器:
SequenceInputStream(Enumeration<? extends InputStream> e):通过记住参数来初始化新创建的SequenceInputStream,该参数必须是生成运行时类型为InputStream对象的Enumeration型参数。
SequenceInputStream(InputStream s1, InputStream s2):通过记住这两个参数来初始化新创建的SequenceInputStream(将按顺序读取这两个参数,先读取s1,然后读取s2),以提供从此SequenceInputStream读取的字节。
方法:
int read():从此输入流中读取下一个数据字节。
int read(byte[] b, int off, int len):将最多len个数据字节从此输入流读入byte数组。
使用序列流将多个文件合并为一个文件
public class SequenceDemo { public static void main(String[] args) throws IOException { //使用集合将多个输入字节流存储 Vector<FileInputStream> v = new Vector<FileInputStream>(); v.add(new FileInputStream("d:\\1.txt")); v.add(new FileInputStream("d:\\2.txt")); v.add(new FileInputStream("d:\\3.txt")); //使用迭代 Enumeration<FileInputStream> enumeration = v.elements(); //使用序列流将多个输入流合并为一个输入流 SequenceInputStream sequence = new SequenceInputStream(enumeration); FileOutputStream fos = new FileOutputStream("d:\\general.txt"); byte[] buf = new byte[1024]; int len = 0; while((len = sequence.read(buf)) != -1){ fos.write(buf, 0, len); } sequence.close(); fos.close(); } }
对一个图片进行切割,然后在合并。
public class SeqDemo { public static void main(String[] args) throws IOException { //splitFile(); mergeFile(); } //切割 public static void splitFile() throws IOException{ //定义一个1M长度的数组,即每个文件大小为1M byte[] buf = new byte[1024*1024]; int len = 0; int count = 1; FileInputStream fis = new FileInputStream("d:\\1.jpg"); FileOutputStream fos = null; while((len = fis.read(buf)) != -1){ //将输出流定义在循环内,即每循环一次,创建一个新的对象,以便能够切割 fos = new FileOutputStream("e:\\" + (count++) + ".part"); fos.write(buf, 0, len); } fis.close(); fos.close(); } //合并 public static void mergeFile() throws IOException{ //使用集合将流合并 Vector<FileInputStream> v = new Vector<FileInputStream>(); v.add(new FileInputStream("e:\\1.part")); v.add(new FileInputStream("e:\\2.part")); v.add(new FileInputStream("e:\\3.part")); v.add(new FileInputStream("e:\\4.part")); Enumeration<FileInputStream> e = v.elements(); SequenceInputStream s = new SequenceInputStream(e); FileOutputStream fos = new FileOutputStream("e:\\all.jpg"); byte[] buf = new byte[1024]; int len = 0; while((len = s.read(buf)) != -1){ fos.write(buf, 0, len); } fos.close(); s.close(); } }
----------------------
ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ----------------------详细请查看:http://edu.csdn.net
相关文章推荐
- Guided Image Filtering
- 在pcDuino使用开源的语音识别Sphinx
- UITableView Class 参考 (1)<Creating Table View Cells>
- requestDisallowInterceptTouchEvent
- missing required architecture i386 解决方法
- UIViewContent
- 点击UITableView的cell展开收缩
- 自定义UITabBarContorller下面的ta…
- 自定义UIPageControl
- UITableView详解
- 关于UINavigationController按钮
- UI常用控件
- UI(2)视图基础
- @GeneratedValue 与 @GenericGenerator
- request.getParameter()与request.getParameterValues()的区别
- UIViewController使用技巧!
- AnalogClock和TimePickerDialog、DatePickerDialog
- 四线八拍步进电机(28BYJ48)Arduino 库stepper
- ios tableView那些事 (十六) UITableView中Cell重用机制导致内容重复解决方法
- 自定义UIBarButtonItem