Java IO 流 为什么不写fis.close()?

try {
/*

  • openFileInput(String)是父类提供的方法, 可以直接获取data目录下指定文件的输入流 / FileInputStream fis = openFileInput("info.txt"); //// 从文件字节输入流转为 字节转字符输入流 ,然后再转为缓存字符流, BufferedReader bf = new BufferedReader(new InputStreamReader( fis)); // 因为保存时数据只有一行,因此读取一次就可以 String readLine = bf.readLine(); bf.close(); /
  • 数据是用户名##密码的形式存储的, 因此需要根据##对http://ask.csdn.net/?ref=toolbar#字符串进行切割 */ 为什么不写fis.close()?

封装:
本质对于装饰者模式比如
BufferedReader br=new BufferedReader(new InpuStreamReader(System.in));
从最外层流开始关闭,就相当于里层的已经调用了close();
就只需要br.close(),即可都实现关闭,底层顺序依然还是先System.in.close()>>>InputStreamRreader().close()>>>br.close();

非封装:
以我的理解输入流读取的文件或者字符串已经读完了会自动返回一个"-1"or"null";通过底层判断就会自动调用close吧

http://www.oschina.net/question/1379006_172293

外面有个包装类,,包装一关里面的一块关。

其实这里用fis.close也是可以的,但是遵循编码规范最好用bf.close,这样可以确保bf对象也释放自己内部相关的资源(如果有的话),最终它还是会调用fis.close的,去看看jdk源码就一目了然