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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 崔陈喜 中级黑马   /  2012-5-15 01:47  /  1942 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

public class BufferedDemo {

        public static void main(String[] args) throws IOException {
BufferedInputStream bis = new BufferedInputStream(new FileInputStream("004.jpg"));
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("dest.jpg"));

int b;
while ((b = bis.read()) != -1)                 
        bos.write(b);                                         

bis.close();//如果我不关闭回怎样?
bos.close();//如果我不关闭回怎样?

        }

}

3 个回复

倒序浏览
楼上问题很纠结,其实视频中老师已经说的很明白了,在简单给你说下
如果你的流不关闭,在自己电脑上的时候就会一直占用你的内存资源,内存的缓存机制。如果这种流多了 你就会发现你电脑运行越来越慢
2.如果是连接服务器上,同上服务器的同一时间段的连接数量是有限的,如果不关闭资源就表示你的机器一直连接在服务器上,等到达到连接数量的最大限制后,其他用户就连接不到服务器了
回复 使用道具 举报
不关的话也不会报错,但是会占用系统资源。
回复 使用道具 举报
本帖最后由 刘克方 于 2012-5-15 08:19 编辑

你不关会浪费内存资源,也有可能数据不能完全写入,完成拷贝;因为其内部有个缓冲区,假如缓冲区为1024字节,每次你写入在1024字节之内,它是不会往硬盘写入数据的而是缓存在内存;如果超出1024它会自动调用flush(),将缓存数据清空并写入目标文件。
close()方法有两个作用
一,清除缓冲区的内容,将其写入目标文件,(因为在close方法内部调用了flush方法)
二,关闭流资源,
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马