黑马程序员技术交流社区

标题: IO流 --缓冲区复制的过程是怎么实现的? [打印本页]

作者: 欧德林    时间: 2012-4-18 10:35
标题: IO流 --缓冲区复制的过程是怎么实现的?
1、复制是先把文件写入内存中,然后在通过一个中转存储,然后再写入一个新文件中, 是这样的 吗?我没有看见带有直接copy的方法?
2、下面 这个String line 就是起中转站的作用吗?
3、最后那个finally 可以直接 写成 finally {bufr.close();bufw.close()  }吗?为什么呢?

/*
通过缓冲区复制一个.java文件。

*/
import java.io.*;

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

                try
                {
                        bufr = new BufferedReader(new FileReader("BufferedWriterDemo.java"));
                        bufw = new BufferedWriter(new FileWriter("bufWriter_Copy.txt"));

                        String line = null;  //这个String line 就是中转站吗?

                        while((line=bufr.readLine())!=null)
                        {
                                bufw.write(line);
                                bufw.newLine();
                                bufw.flush();

                        }
                }
                catch (IOException e)
                {
                        throw new RuntimeException("读写失败");
                }
                finally
                {
                        try
                        {
                                if(bufr!=null)
                                        bufr.close();
                        }
                        catch (IOException e)
                        {
                                throw new RuntimeException("读取关闭失败");
                        }
                        try
                        {
                                if(bufw!=null)
                                        bufw.close();
                        }
                        catch (IOException e)
                        {
                                throw new RuntimeException("写入关闭失败");
                        }
                }
        }
}

作者: τ、高童鞋ゝ    时间: 2012-4-18 10:50
String line = null;  //这个String line 就是中转站吗?

是的,原理如毕老师视频中画的IO流程图一样,把图附上请作为参考。
作者: 伊文龙    时间: 2012-4-18 10:52
1.复制文件是一边读取源文件写到内存中,一遍从内存中把读取到的数据写到目标文件的的一个过程
2.String类型的line可以理解为一个中转站
3.finally里面的语句不管前面有木有异常,都会在最后被执行到,所以很多时候都把关闭的语句放在finally语句里面,防止前面抛出异常导致输入输出流无法关闭。
作者: 张明星    时间: 2012-4-18 11:14
是中转站,这个程序 读一行 然后写一行 ,中转站是io缓冲区,也就是内存中的一块
  public void close()
           throws IOException   也就是说close()方法抛出IOException异常,所以必须有捕获机制哦




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