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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 杜光 高级黑马   /  2013-6-5 21:09  /  1248 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 杜光 于 2013-6-9 22:39 编辑

下面这段代码中,被拆后 重新组合的文件总是和源文件大小不一致,求解~~~!!!
  1. import java.util.*;
  2. import java.io.*;

  3. class  SplitFile
  4. {
  5.         public static void main(String[] args)throws IOException
  6.         {
  7.                 splitFile();

  8.                 sequenceFile();

  9.         }

  10.         public static void splitFile()throws IOException
  11.         {
  12.                 FileInputStream fis = new FileInputStream("d:\\Demo\\day20\\1.mp3");

  13.                 FileOutputStream fos = null;

  14.                 byte[] buf = new byte[1024*1024];
  15.                
  16.                 int count = 1;

  17.                 int len = 0;

  18.                 while((len=fis.read(buf))!=-1)
  19.                 {
  20.                         fos = new FileOutputStream("d:\\Demo\\day20\\splitfiles\\"+(count++)+".part");
  21.                         fos.write(buf,0,len);
  22.                         fos.close();
  23.                 }

  24.                 fis.close();
  25.         }

  26.         public static void sequenceFile()throws IOException
  27.         {
  28.                 Vector<FileInputStream> v = new Vector<FileInputStream>();

  29.                 for (int a=1; a<6; a++)
  30.                 {
  31.                         v.add(new FileInputStream("D:\\Demo\\day20\\splitfiles\\"+(a++)+".part"));

  32.                 }

  33.                 Enumeration<FileInputStream> en = v.elements();

  34.                 SequenceInputStream sis = new SequenceInputStream(en);

  35.                 FileOutputStream fos = new FileOutputStream("d:\\1.mp3");

  36.                 byte[] buf = new byte[1024];

  37.                 int len = 0;

  38.                 while((len=sis.read(buf))!=-1)
  39.                 {
  40.                         fos.write(buf,0,len);
  41.                 }

  42.                 fos.close();
  43.                 sis.close();


  44.         }
  45. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
Sword + 1

查看全部评分

4 个回复

倒序浏览
  1. for (int a=1; a<6; a++)
  2.                 {
  3.                         v.add(new FileInputStream("D:\\Demo\\day20\\splitfiles\\"+(a++)+".part"));

  4.                 }
复制代码
你的这段代码for代码块中, v.add(new FileInputStream("D:\\Demo\\day20\\splitfiles\\"+(a++)+".part"));执行完之后a已经加1了,然后又执行了 for (int a=1; a<6; a++)循环中的a++,所以等于a每次加2了,肯定有部分字节流失的。

评分

参与人数 1技术分 +1 收起 理由
Sword + 1

查看全部评分

回复 使用道具 举报
娄田田 发表于 2013-6-5 23:19
你的这段代码for代码块中, v.add(new FileInputStream("D:\\Demo\\day20\\splitfiles\\"+(a++)+".part")); ...

一语点醒梦中人。。。自己写的东西。。总是不容易看出来。。 谢谢了
回复 使用道具 举报
杜光 发表于 2013-6-6 11:19
一语点醒梦中人。。。自己写的东西。。总是不容易看出来。。 谢谢了

:)不客气  
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马