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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 禅伤 中级黑马   /  2014-8-1 18:29  /  765 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

代码如下:
private static void split() throws IOException{
                FileInputStream fis=new FileInputStream("f:\\21.mp3");
                FileOutputStream fos=null;
                byte[] b=new byte[1024*1024];
                int len=0;
                int count=1;
                while((len=fis.read(b))!=-1){
                        fos=new FileOutputStream("f:\\"+(count++)+".part");
                        fos.write(b,0,len);
                        fos.close();
                }
                fos.close();
                fis.close();
        }
       
代码中:        byte[] b=new byte[1024*1024];表示按照1MB的单位来进行切割,如果我想切割一个几GB的文件我要怎么指定单位来进行切割???

如果指定100MB或1GB为单位一定会造成内存溢出,指定1KB或1MB的话效率又很低

1 个回复

倒序浏览
可以指定1M,然后用循环,就是你每读一M,然后就写出一M,因为输入流和输出流都会有光标记忆上次读到位置,这样就可以保证绵绵不绝的读取和写入了。

while((len=fis.read(b))!=-1){
                        fos=new FileOutputStream("f:\\"+(count++)+".part");
                        fos.write(b,0,len);
                        fos.close();
                }
你这里代码的意思就是,当fis.read(b)读到1M时,这是len=1024,不等于-1,判断为true,所以往下执行,fos.write(b,0,len);的意思是把缓存数组里面的内容写出道文件上,长度为len,然后在判断,在读,在写,直到到了文件的末尾,即len=fis.read(b)=-1,循环结束。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马