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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 徐升2013 于 2013-4-3 14:21 编辑

代码:
fos = new FileOutputStream("d:\\2.mp3");                 / / 该句创建一个流对象。
                        fis = new FileInputStream(file);              //同上,file是传入进来的参数.
                        byte[] buf = new byte[1024];              //定义一个临时的缓冲数组。
                         int temp = 0;                                       //定义一个临时存储长度的变量。
                        while((temp = fis.read(buf))!= -1)          //这里进入循环判断,并读取操作存储至数组中。
                        {
                                fos.write(buf,0,temp);                     //这里是写入操作。
                                System.out.println("1");
                        }

经过测试,他读取了很多次,有没有办法让 他一次读取,然后在写入输出流,来提高效率。减少判断的次数,以及来回读取写入的流程。

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

7 个回复

倒序浏览
增大buf的容量,或者采用BufferedInputStream()来提高效率。

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
你把缓冲数组定义的大一点就好了,但是数据过大 有可能内存溢出.
回复 使用道具 举报
想要一次读取不可取,因为如果文件过大会导致程序卡死。你可以考虑一下管道流,那个也挺不错
回复 使用道具 举报
С呲號→佔缐 发表于 2013-4-3 11:27
增大buf的容量,或者采用BufferedInputStream()来提高效率。

这里的buf数组我有点不理解,他是读一次存一次,然后释放?还是还在里面存储。也就是说当文件复制完成时,该数组是保存了文件内的所有内容么?它的大小会自动增加会减少么?
回复 使用道具 举报
buf就相当于一个桶,用来装水(流),装满了就倒到另外一个容器中,然后继续装,这就是缓冲的原理
回复 使用道具 举报
谢谢你们的回答 真心有用 {:soso_e113:}
回复 使用道具 举报
如果问题未解决,请继续追问,如果没有问题了,请将帖子分类 改为“已解决”,谢谢
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马