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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 花自凋零 中级黑马   /  2014-7-3 11:18  /  1731 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

请问一下复制文本以下两种方法,方法一的代码简单,方法二运用了流的缓冲区,哪种方法更好?
方法一
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("读取关闭失败");
                        }
                }






        }
}

评分

参与人数 1技术分 +1 收起 理由
李小然 + 1

查看全部评分

9 个回复

倒序浏览
缓冲区可以调高效率。
回复 使用道具 举报
哥们 用运行时间自己鉴定下啊
将复制文本方法封装成copy方法,再用下面代码调用
  1. long start = System.currentTimeMillis();
  2.                 copy();
  3.                 long end = System.currentTimeMillis();
  4.                 System.out.println(end-start+"ms");
复制代码

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

如果对文本有指定的编码表,就用转换流。或者会乱码。

评分

参与人数 1技术分 +1 收起 理由
李小然 + 1

查看全部评分

回复 使用道具 举报
必须是有缓冲区的呀!
回复 使用道具 举报
第二种方法较好,因为第一种方法虽然用到了数组,但是每次毕竟传递的数据是1024个字符,并没有缓冲区那么大,这意味着如果文件较大,第一种方式需要传递很多次才能完成,而第二种方式用到的是缓冲区,一次可以传递完。这是我个人理解
回复 使用道具 举报
缓冲区里面定义的也是数组,没什么区别的,缓冲区默认的数组是8192
回复 使用道具 举报
看你复制的文件大小,试过几次,时间的差距可以忽略不计。
回复 使用道具 举报
缓冲区提高了数据传递效率
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马