黑马程序员技术交流社区
标题:
复习io流时突然想到的一个问题
[打印本页]
作者:
孙沛
时间:
2012-9-15 22:02
标题:
复习io流时突然想到的一个问题
今天做车时突然蹦出了个io流的问题
import java.io.*;
class BufferedReaderDemo
{
public static void main(String[] args) throws IOException
{
//创建一个读取流对象和文件相关联。
FileReader fr = new FileReader("buf.txt");
//为了提高效率。加入缓冲技术。将字符读取流对象作为参数传递给缓冲对象的构造函数。
BufferedReader bufr = new BufferedReader(fr);
String line = null;
while((line=bufr.readLine())!=null)
{
System.out.print(line);
}
bufr.close();
}
}
这个问题呢,就是java有垃圾回收机制,反射内存中没有被调用的对象,会自动回收,但是缓冲流也在内存中啊,也是一个对象,为什么他需要关闭啊,bufr.close();
作者:
冯心程
时间:
2012-9-15 22:08
个人想法
你不关闭流 流就一直关联着源 关联着没关闭就不是垃圾啊 垃圾回收机制怎么会回收它呢
作者:
程金
时间:
2012-9-15 23:16
本帖最后由 程金 于 2012-9-15 23:28 编辑
流不单在内存中分配了空间,也在操作系统占有了资源,java的gc是能从内存中回收不使用的对象,但对操作系统分配的资源是无能为力的,所以就要调用close()方法来通知OS来释放这个资源。假如你打开了一个文件流没关闭,这时候你去双击打开文件,操作系统会提示你文件正在被占用.java的gc仅仅管理java虚拟机的内存,回收不使用的对象,你需要需要手动close流来释放系统资源
作者:
尤圣回
时间:
2012-9-15 23:23
因为 底层调用的是c c没有自动垃圾回收机制 所以呀自动关闭
作者:
黄敏
时间:
2012-9-15 23:32
import java.io.*;
class BufferedReaderDemo
{
public static void main(String[] args) throws IOException
{
//创建一个读取流对象和文件相关联。
FileReader fr = new FileReader("buf.txt");
//为了提高效率。加入缓冲技术。将字符读取流对象作为参数传递给缓冲对象的构造函数。
BufferedReader bufr = new BufferedReader(fr);
String line = null;
while((line=bufr.readLine())!=null)
{
System.out.print(line);
}
bufr.close();
}
}
这个问题呢,就是java有垃圾回收机制,反射内存中没有被调用的对象,会自动回收,但是缓冲流也在内存中啊,也是一个对象,为什么他需要关闭啊,bufr.close();
给你说说啊,这是我的理解 希望对你有帮助。
加入说现在有一个A程序就是对操作系统中 文件进行读取写入操作,但是你没有这句bufr.close(),你这个bufr对象和这buf.txt就一直连接着,没有释放,就像你打电话没有挂断一样 这时候,程序中另外一个方法来对buf.txt文件进行写入操作,你试想想 你之前的电话都没挂断,现在有别人给你打电话你能接通吗(是电话不是手机),
还有需要说明的是,这个跟垃圾回收机制没有关系,对文件进行IO流操作 bufr.close()这句的意思是告诉jvm释放对操作系统中的bur.txt文件的操作。操作系统就知道了bufr.txt A程序不用了 别的程序可以对其操作了
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2