黑马程序员技术交流社区

标题: 关于拷贝文件中的这句话的执行流程。 [打印本页]

作者: 徐升2013    时间: 2013-4-3 11:23
标题: 关于拷贝文件中的这句话的执行流程。
本帖最后由 徐升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");
                        }

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

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

这里的buf数组我有点不理解,他是读一次存一次,然后释放?还是还在里面存储。也就是说当文件复制完成时,该数组是保存了文件内的所有内容么?它的大小会自动增加会减少么?
作者: С呲號→佔缐    时间: 2013-4-3 11:38
buf就相当于一个桶,用来装水(流),装满了就倒到另外一个容器中,然后继续装,这就是缓冲的原理
作者: 徐升2013    时间: 2013-4-3 11:47
谢谢你们的回答 真心有用 {:soso_e113:}
作者: 黄玉昆    时间: 2013-4-3 12:53
如果问题未解决,请继续追问,如果没有问题了,请将帖子分类 改为“已解决”,谢谢




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