黑马程序员技术交流社区
标题:
视频截取问题
[打印本页]
作者:
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