黑马程序员技术交流社区
标题:
关于拷贝文件中的这句话的执行流程。
[打印本页]
作者:
徐升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