黑马程序员技术交流社区
标题:
关于io问题
[打印本页]
作者:
马新乐
时间:
2011-12-29 02:16
标题:
关于io问题
FileWriter fw=new FileWriter("buf.txt");
可以用fw.close();关闭
写缓冲区的时候关闭就直接把fw.close()给省略了,为什么?两者关闭有什么区别?
作者:
闫江龙
时间:
2011-12-29 03:04
BufferedWrite bufw()=new BufferedWriter(new FileWriter("buf.txt");)
关闭缓冲区 就是在关闭缓冲区里的流对象 其实就是把new FileWriter("buf.txt")给关掉了
作者:
刘基军
时间:
2011-12-29 10:50
本帖最后由 monghuan 于 2011-12-29 10:52 编辑
查看jdk中的\src.zip\java\io\BufferedReader源代码的close()方法:(其中in.close()就是指你讲的fw.close())
public void close() throws IOException {
synchronized (lock) {
if (in == null)
return;
in.close();
in = null;
cb = null;
}
复制代码
作者:
林铁柱
时间:
2011-12-29 11:12
因為真正在進行讀寫操作的是緩衝區裏面的流對象,而不是緩衝區
作者:
六期刘健
时间:
2011-12-29 11:45
本帖最后由 六期刘健 于 2011-12-29 11:46 编辑
/*
写一个自己的BufferedReader()
和他的方法readLine();
*/
import java.io.*;
class MyBuff
{
private FileReader fr;
MyBuff(FileReader fr){
this.fr=fr;
}
public String MyreadLine()throws IOException
{
StringBuilder sb=new StringBuilder();
int i=0;
while((i=fr.read())!=-1){
if(i=='\r')
continue;
if(i=='\n')
return sb.toString();
else
sb.append((char)i);
}
return null;
}
public void Myclose()throws IOException
{
fr.close();
}
}
class MyBuffered
{
public static void main(String[] args) throws IOException
{
FileReader fr=new FileReader("ceshi.java");
MyBuff mb=new MyBuff(fr);
String s="";
while((s=mb.MyreadLine())!=null){
System.out.println(s);
}
mb.Myclose();
}
}
这是自己写的缓冲区方法!!缓冲区方法直接把FileReader关闭了道理和Filewriter一样
作者:
周吉明
时间:
2011-12-29 12:29
缓冲区关闭其实就是在关闭缓冲区里的流对象,功能一样。我个人理解:举例说,冰箱是缓冲区,冰箱里的灯是流对象,打开冰箱后可以用手按灯的开关,关闭冰箱里的灯(即fw.close()),当然你关闭冰箱时(关闭缓冲区),冰箱里的灯就会自动关闭(流对象关闭)。不知例子举得是否恰当,以上是只是个人理解。
作者:
刘健
时间:
2011-12-29 15:16
就像是水龙头和水闸一样,fw.close就是水龙头,缓冲区就是水闸,关了水闸当然水龙头没水,也就相当于关闭了
作者:
大梅
时间:
2011-12-29 20:52
学这个的时候,我一直怀疑缓冲区的close()方法是不是调用了流的close()方法。
作者:
陈浩
时间:
2011-12-29 21:25
BufferedWriter 是FileWriter的装饰类,在写缓冲区时调用的其实就是流资源,关闭BufferedWriter 对象其实就是相当于关闭了流对象,所以相应的流对象关闭动作可省略。
作者:
刘明瑞
时间:
2012-1-11 15:26
缓冲区对象其实还是在用FileWriter对象来进行实际操作的,只不过上面多加了点功能。关了缓冲区就关了流资源的了。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2