黑马程序员技术交流社区

标题: 视频截取问题 [打印本页]

作者: xingshenghui    时间: 2012-8-10 08:16
标题: 视频截取问题
package aaa;
/**
这是一张图片如果一个视频的话怎么才能控制大小是100MB存一次
/*
import java.io.*;
public class Demo {
public static void main(String[]args) throws IOException{
    File file=new File("D:\\abc.bmp");
   
    FileInputStream fis=new FileInputStream(file);
    int count=0,len=0;
    byte[]bytes=new byte[1024*1024];
    while((len=fis.read(bytes))!=-1){
        FileOutputStream fos=new FileOutputStream("D:\\"+(count++)+".part");
        fos.write(bytes,0,len);
        fos.close();
    }
    fis.close();
   
   
   
   
   
}
}



作者: 王程    时间: 2012-8-10 08:41
控制大小,取决于你定义的byte数组的大小,byte[]bytes=new byte[1024*1024];
这里byte数组的大小就是1M,while((len=fis.read(bytes))!=-1)一次就读取1M,如果想改大一些,
比如3M,就byte[] bytes=new byte[1024*1024*3];
不过100M是不可能的,JVM的初始内存内存只有64M,可能会导致内存溢出,而且数据太大了也会降低程序运行效率
作者: 杜佳瑞    时间: 2012-8-10 10:45
本帖最后由 杜佳瑞 于 2012-8-10 10:47 编辑

楼主想要的效果是可以实现的,毕老师在视频中提过一句,虽然数组我们只设置了1M,但是我们可以设置一个计数器,每一个碎片存储100次,用这个计数器来计数,不就是100M吗。下面是我改动的,希望可以帮助你。
import java.io.*;
public class Demo
{
        public static void main(String[]args) throws IOException
        {
                File file=new File("D:\\123.avi");
               
                FileInputStream fis=new FileInputStream(file);
                int count=0,len=0,num=1;//num就是计数器,这里我设置的是1因为它不用作角标,存一次就算一次的。
                byte[] bytes=new byte[1024*1024];
                FileOutputStream fos=new FileOutputStream("D:\\"+count+".part");
                while((len=fis.read(bytes))!=-1)
                {
                        //当计数器存够100次后,第一个100M碎片产生,这时count++看,继续存储第二个碎片。
                        if(num>100)
                        {        
                                count++;
                                num=1;//计数器归位
                                fos=new FileOutputStream("D:\\"+count+".part");//创建新碎片
                                
                        }
                        fos.write(bytes,0,len);
                        num++;//每存一次计数器加1
                        fos.flush();
                }
                fos.close();
                fis.close();
        }
}

   
   




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2