黑马程序员技术交流社区
标题:
用Io流 copy文件那种效率高?
[打印本页]
作者:
赵文杰
时间:
2012-5-11 22:10
标题:
用Io流 copy文件那种效率高?
public static void main(String[] args) throws IOException {
A:FileInputStream fis = new FileInputStream("004.jpg");
FileOutputStream fos = new FileOutputStream("dest.jpg");
byte[] buffer = new byte[1024];
int len;
while ((len = fis.read(buffer)) != -1)
fos.write(buffer, 0, len);
fis.close();
fos.close();
}
B:FileInputStream fis = new FileInputStream("004.jpg");
FileOutputStream fos = new FileOutputStream("dest.jpg");
int b;
while((b=fis.read)!=-1)
fos.write(b);
作者:
袁培育
时间:
2012-5-12 08:39
当然是A喽,A是一次性读取多个字节然后再一次写出去接着再读,B是读一个字节写一个字节,相比之下A较快的,不信你可以都试一下,记录程序运行的时间就知道了。我都试过了(我试的是字符流),我用字符流的三种方法,不用缓冲的最慢,用bufferedreader和bufferedwriter稍快,用自定义数组最快。另外,你B方法里的while循环条件写错了,少加个括号。
作者:
李啸
时间:
2012-5-12 08:43
嗯 同一楼上的观点 A中定义的数组可以一起读取buffer .length个字节比一次读取一个的要快 效率要高
作者:
赵志勇
时间:
2012-5-12 08:45
袁培育 发表于 2012-5-12 08:39
当然是A喽,A是一次性读取多个字节然后再一次写出去接着再读,B是读一个字节写一个字节,相比之下A较快的, ...
顶,我也是这么认为的。
作者:
小小企鹅
时间:
2012-5-12 10:01
A方法fis.read(buffer)一次读取1024个字节
B方法fis.read()一次读取1个字节
FileInputStream fis = new FileInputStream("004.jpg");
FileOutputStream fos = new FileOutputStream("dest.jpg");
int b;
while((b=fis.read())!=-1) //fis.read()从此输入流中读取一个数据字节。
fos.write(b);
作者:
高云飞
时间:
2012-5-12 10:46
还不够高,详情查看我的帖子:
http://bbs.itheima.com/thread-13883-1-1.html
作者:
孙宇晨
时间:
2012-5-12 12:01
A用的是缓冲流技术.把大量的数量存到数组中一次拿出来 B是读一个写一个 所以会很慢.
望采纳{:soso_e163:}
作者:
赵茹艳
时间:
2012-5-12 16:06
用A效率高,拷贝文件共有3种方法,除了上面两种,还有一种使用BufferedInputStream和BufferedOutStream,是FileInputStream和FileOutputStream的包装流,提供了缓存机制,但是相比较A还是稍慢一些,三种方法中B最慢!
作者:
赵文杰
时间:
2012-5-13 08:27
呵呵 学得不错哦
作者:
崔陈喜
时间:
2012-5-13 13:35
B比较慢BufferedInputStream和BufferedOutStream其次,A效率相对较高,但和BufferedInputStream和BufferedOutStream相比也不是绝对的 取决于byte[] buffer = new byte[1024]; 数组长度。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2