黑马程序员技术交流社区

标题: 关于IO流文件复制问题的,缓冲区读写问题,麻烦大神 [打印本页]

作者: 王溢君    时间: 2013-1-27 11:24
标题: 关于IO流文件复制问题的,缓冲区读写问题,麻烦大神

  1. import java.io.*;

  2. class  FileTest
  3. {
  4.         public static void main(String[] args) //throws IOException
  5.         {
  6.                 copy_2();
  7.         }
  8.         public static void copy_2()
  9.         {
  10.                 FileReader fr = null;
  11.                 FileWriter fw = null;

  12.                 try
  13.                 {
  14.                         fr = new FileReader("demo.txt");
  15.                         fw = new FileWriter("democopy_2.txt");

  16.                         int len = 0;
  17.                         char[] buf = new char[1024];//定义缓冲区

  18.                         while ((len = fr.read(buf))!=-1)//读入缓冲区
  19.                         {
  20.                                 fw.write(buf,0,len);//这里又写入缓冲区,
  21.                                 //不怕这次写入还没刷新到硬盘,就被下一次
  22.                                 //fr.read(buf)读入覆盖了吗?
  23.                         }
  24.                 }
  25.                 catch (IOException e)
  26.                 {
  27.                         throw new RuntimeException("读写失败");
  28.                 }

  29.                 finally
  30.                 {
  31.                         if (fr!=null)
  32.                         {
  33.                                 try
  34.                                 {
  35.                                         fr.close();
  36.                                 }
  37.                                 catch (IOException e)
  38.                                 {
  39.                                 }
  40.                                
  41.                         }

  42.                         if (fw!=null)
  43.                         {
  44.                                 try
  45.                                 {
  46.                                         fw.close();
  47.                                 }
  48.                                 catch (IOException e)
  49.                                 {
  50.                                 }
  51.                                
  52.                         }
  53.                 }
  54.         }
  55. }
复制代码
while ((len = fr.read(buf))!=-1)//读入缓冲区
{
fw.write(buf,0,len);//这里又写入缓冲区,
//不怕这次写入还没刷新到硬盘,就被下一次
//fr.read(buf)读入覆盖了吗?

作者: 冷延冰    时间: 2013-1-27 11:32
这是由主线程执行的读取、写入操作。中间不会有等待,都是从上向下执行,不存在并发问题。
作者: 黑马张旭    时间: 2013-1-27 14:34
嗯 因为定义的缓冲区数组大小是1024  如果数据没超这个限制按照代码顺序执行 最后也有
fr.close();    fw.close(); 所以数据刷新好了   如果超过这个大小  情况是和上面分析的一样主线程从新循环执行 所以并不存在并发 多线程的问题     
作者: 张敬培    时间: 2013-1-27 17:48
fw和fr开辟的不是一个内存缓冲。怎么会出现覆盖呢!
就好像在我有两个箱子,一个是frBox,一个是fwBox,从frBox中读取数据,然后放到fwBox中,不在一个Box中操作,怎么会出现覆盖情况呢。是吧




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