黑马程序员技术交流社区

标题: 复制文本哪种方法更好 [打印本页]

作者: 花自凋零    时间: 2014-7-3 11:18
标题: 复制文本哪种方法更好
请问一下复制文本以下两种方法,方法一的代码简单,方法二运用了流的缓冲区,哪种方法更好?
方法一
import java.io.*;
class One
{
        public static void main(String[] args)
        {
                FileWriter fw = null;
                FileReader fr = null;
                try
                {
                        fw = new FileWriter("000.txt");
                        fr = new FileReader("Demo.java");
                        char[] buf = new char[1024];
                        int len = 0;
                        while ((len=fr.read(buf))!=-1)
                        {
                                fw.write(buf,0,len);
                        }
                }
                catch (IOException e)
                {
                        throw new RuntimeException("读写失败");
                }
                finally
                {
                        try
                        {
                                if (fw!=null)
                                fw.close();
                        }
                        catch (IOException e)
                        {
                                throw new RuntimeException("写入关闭失败");
                        }
                        try
                        {
                                if (fr!=null)
                                fr.close();
                        }
                        catch (IOException e)
                        {
                                throw new RuntimeException("读取关闭失败");
                        }
                }
        }
}

方法二

import java.io.*;
class Two

{
        public static void main(String[] args)
        {
                BufferedWriter bufw = null;
                BufferedReader bufr = null;

                try
                {
                        bufw = new BufferedWriter(new FileWriter("000.txt"));
                        bufr = new BufferedReader(new FileReader("Demo.java"));
                       
                        String line = null;
                        while ((line=bufr.readLine())!=null)
                        {
                                bufw.write(line);
                                bufw.newLine();
                                bufw.flush();
                        }
                }
                catch (IOException e)
                {
                        throw new RuntimeException("读写失败");
                }
                finally
                {
                        try
                        {
                                if (bufw!=null)
                                bufw.close();
                        }
                        catch (IOException e)
                        {
                                throw new RuntimeException("写入关闭失败");
                        }
                        try
                        {
                                if (bufr!=null)
                                bufr.close();
                        }
                        catch (IOException e)
                        {
                                throw new RuntimeException("读取关闭失败");
                        }
                }






        }
}

作者: 木华    时间: 2014-7-3 12:03
缓冲区可以调高效率。
作者: HF_Opticalix    时间: 2014-7-3 12:09
哥们 用运行时间自己鉴定下啊
将复制文本方法封装成copy方法,再用下面代码调用
  1. long start = System.currentTimeMillis();
  2.                 copy();
  3.                 long end = System.currentTimeMillis();
  4.                 System.out.println(end-start+"ms");
复制代码

哪个快哪个就好
作者: 跃动    时间: 2014-7-3 17:16
个人觉得用缓冲区的方法好:)
作者: 毅心缘    时间: 2014-7-3 18:19
复制文本文件一般用的都是字符流。加入缓冲区技术,可以提高效率。
复制媒体文件的话,就要用字节流。否者就算复制出来,也打不开。
如果你想知道那个效率高的话,可以进行测试。
  1.        long start = System.currentTimeMillis();
  2.                 copy();
  3.                 long end = System.currentTimeMillis();
  4.                 System.out.println(end-start+"ms");
复制代码

如果对文本有指定的编码表,就用转换流。或者会乱码。
作者: Whero    时间: 2014-7-3 18:35
必须是有缓冲区的呀!
作者: 普哥    时间: 2014-7-3 19:41
第二种方法较好,因为第一种方法虽然用到了数组,但是每次毕竟传递的数据是1024个字符,并没有缓冲区那么大,这意味着如果文件较大,第一种方式需要传递很多次才能完成,而第二种方式用到的是缓冲区,一次可以传递完。这是我个人理解
作者: 肥洋洋    时间: 2014-7-3 21:48
缓冲区里面定义的也是数组,没什么区别的,缓冲区默认的数组是8192
作者: wisely    时间: 2014-7-4 18:30
看你复制的文件大小,试过几次,时间的差距可以忽略不计。
作者: 自闭宅男    时间: 2014-7-4 20:02
缓冲区提高了数据传递效率




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