搜尋

首頁  >  問答  >  主體

java - inputStream关闭了,还有必要关闭InputStreamReader和BufferedReader吗?

PHP中文网PHP中文网2803 天前1189

全部回覆(3)我來回復

  • PHP中文网

    PHP中文网2017-04-18 09:32:18

    直接呼叫最外層的close()就可以了


    update:

    http://docs.oracle.com/javase/8/docs/api/java/io/BufferedReader.html#close--

    Closes the stream and releases any system resources associated with it

    http://docs.oracle.com/javase/8/docs/api/java/io/InputStreamReader.html#close--

    Closes the stream and releases any system resources associated with it

    就是一個鏈條 你關閉最外面的 最外面的關閉裡面的 裡面的關閉更裡面的


    當然你如果硬要說關閉可能失敗 一定要finally一下我也沒辦法

    回覆
    0
  • 阿神

    阿神2017-04-18 09:32:18

    如果這個問題是:BufferedReader關閉了,有必要關閉InputStreamReader和InputStream嗎? ,那這個問題還正常一點........

    Java的io包裡面的stream和reader,都用的是裝飾者模式。你只需要呼叫最外層裝飾者的close方法,它就能將其所裝飾的stream或reader也一併關閉。

    實在不行,打開BufferedReader的源代碼看看close方法,就會發現它再這個方法裡關閉了它所裝飾的reader.

    再實在不行,推薦在下的拙作一篇,也許能解決你的疑惑《Java IO : 流,以及裝飾器模式在其上的運用》

    回覆
    0
  • 怪我咯

    怪我咯2017-04-18 09:32:18

    都要關的,依序一個個關,最好在finally中

    finally{
        try{
            br.close();
            isr.close();
            is.close();
        }catch(Exception e){
            ......
        }
    }

    最先創建的最後關,最後創建的最先關

    回覆
    0
  • 取消回覆