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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

xingshenghui

初级黑马

  • 黑马币:

  • 帖子:

  • 精华:

© xingshenghui 初级黑马   /  2012-8-10 08:16  /  1473 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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:38

评分

参与人数 1技术分 +1 收起 理由
张_涛 + 1 新人提问,赞一个!

查看全部评分

2 个回复

倒序浏览
控制大小,取决于你定义的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,可能会导致内存溢出,而且数据太大了也会降低程序运行效率

评分

参与人数 1技术分 +1 收起 理由
张_涛 + 1 赞一个!

查看全部评分

回复 使用道具 举报
本帖最后由 杜佳瑞 于 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();
        }
}

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