A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© kfcka 中级黑马   /  2015-3-13 21:56  /  628 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 kfcka 于 2015-3-13 21:59 编辑
  1. import java.io.*;
  2. import java.util.*;
  3. class SplitAndMerge
  4. {
  5.         public static void main(String[] args) throws IOException
  6.         {
  7.                 MegerInputStream();
  8.         }
  9.         //切割流
  10.         public static void SplitOutputStream() throws IOException
  11.         {
  12.                 //创建文件对象
  13.                 File file=new File("d:\\1.jpg");
  14.                 //创建字节输入流
  15.                 FileInputStream fis=new FileInputStream(file);
  16.                 //创建字节输出流
  17.                 FileOutputStream fos=null;
  18.                 //创建缓冲区
  19.                 byte[] buf=new byte[1024*512];
  20.                 int len=0;
  21.                 //定义计数器
  22.                 int count=1;
  23.                 while((len=fis.read(buf))!=-1)
  24.                 {
  25.                         //创建一个字节输出流,当存满缓冲区后,再创建另一个字节输出流
  26.                          fos=new FileOutputStream("a."+"part"+(count++));
  27.                         fos.write(buf,0,len);
  28.                         fos.close();
  29.                 }
  30.                 fis.close();               
  31.         }
  32.         //合并流:用SequenceInputStream的构造方法Enumeration枚举来接收多个字节流
  33.         //因为Vector集合方法效率低,所以,用ArrayList集合代替Vector集合。
  34.         //替代的方法是:复写Enumeration方法的hasMoreElements()方法和nextElement()方法
  35.     public static void MegerInputStream() throws IOException
  36.         {
  37.                 //创建ArrayList集合
  38.                 ArrayList<FileInputStream> al=new ArrayList<FileInputStream>();
  39.                 //将四个流对象加入到集合中
  40.                 for(int x=1;x<5;x++)
  41.                 {
  42.                         al.add(new FileInputStream("a.part"+x));
  43.                 }               
  44.                 //创建Inerator迭代器
  45.                  Iterator<FileInputStream> it=al.iterator();
  46.                 //复写Enumeration枚举对象
  47.                 Enumeration<FileInputStream> en=new Enumeration<FileInputStream>()
  48.                 {
  49.                         public boolean hasMoreElements()
  50.                         {
  51.                                 return it.hasNext();
  52.                         }
  53.                         public FileInputStream nextElement()
  54.                         {
  55.                                 return it.next();
  56.                         }
  57.                 };
  58.                 //创建SequenceInputStream对象
  59.                 SequenceInputStream sis=new SequenceInputStream(en);
  60.                 //创建字节输出流
  61.                 FileOutputStream fos=new FileOutputStream("b.jpg");
  62.                 byte[] buf=new byte[1024*512];
  63.                 int len=0;
  64.                 while((len=sis.read(buf))!=-1)
  65.                 {
  66.                         fos.write(buf,0,len);
  67.                 }
  68.                 sis.close();
  69.                 fos.close();
  70.         }
  71.        
  72. }
复制代码



在合并流的地方有两处错误 ,错误提示如下 :

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马