A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 孙沛 中级黑马   /  2012-9-15 22:02  /  2113 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

今天做车时突然蹦出了个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();



评分

参与人数 1技术分 +1 收起 理由
田建 + 1 赞一个!

查看全部评分

4 个回复

倒序浏览
个人想法
你不关闭流 流就一直关联着源  关联着没关闭就不是垃圾啊 垃圾回收机制怎么会回收它呢  
回复 使用道具 举报
本帖最后由 程金 于 2012-9-15 23:28 编辑

流不单在内存中分配了空间,也在操作系统占有了资源,java的gc是能从内存中回收不使用的对象,但对操作系统分配的资源是无能为力的,所以就要调用close()方法来通知OS来释放这个资源。假如你打开了一个文件流没关闭,这时候你去双击打开文件,操作系统会提示你文件正在被占用.java的gc仅仅管理java虚拟机的内存,回收不使用的对象,你需要需要手动close流来释放系统资源

评分

参与人数 1技术分 +1 收起 理由
田建 + 1

查看全部评分

回复 使用道具 举报
因为 底层调用的是c c没有自动垃圾回收机制 所以呀自动关闭
回复 使用道具 举报
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程序不用了  别的程序可以对其操作了 

评分

参与人数 1技术分 +1 收起 理由
田建 + 1 赞一个!

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马