黑马程序员技术交流社区
标题:
关于IO流文件复制问题的,缓冲区读写问题,麻烦大神
[打印本页]
作者:
王溢君
时间:
2013-1-27 11:24
标题:
关于IO流文件复制问题的,缓冲区读写问题,麻烦大神
import java.io.*;
class FileTest
{
public static void main(String[] args) //throws IOException
{
copy_2();
}
public static void copy_2()
{
FileReader fr = null;
FileWriter fw = null;
try
{
fr = new FileReader("demo.txt");
fw = new FileWriter("democopy_2.txt");
int len = 0;
char[] buf = new char[1024];//定义缓冲区
while ((len = fr.read(buf))!=-1)//读入缓冲区
{
fw.write(buf,0,len);//这里又写入缓冲区,
//不怕这次写入还没刷新到硬盘,就被下一次
//fr.read(buf)读入覆盖了吗?
}
}
catch (IOException e)
{
throw new RuntimeException("读写失败");
}
finally
{
if (fr!=null)
{
try
{
fr.close();
}
catch (IOException e)
{
}
}
if (fw!=null)
{
try
{
fw.close();
}
catch (IOException e)
{
}
}
}
}
}
复制代码
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