黑马程序员技术交流社区
标题:
文件切割问题
[打印本页]
作者:
禅伤
时间:
2014-8-1 18:29
标题:
文件切割问题
代码如下:
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的话效率又很低
作者:
zippo
时间:
2014-8-1 18:41
可以指定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,循环结束。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2