有3個接口對於流類至關重要。其中兩個接口是Closeable和Flushable,它們是在java.io包中定義的,而且是由JDK5添加的。第3個接口是AutoColseable,它是由JDK7添加的新接口,被打包到java.lang包中。java
AutoCloseable接口對JDK7新添加的帶資源的try語句提供了支持,這種try語句能夠自動執行資源關閉過程。只有實現了AutoCloseable接口的類的對象才能夠由帶資源的try語句進行管理。AutoCloseable接口只定義了close()方法:緩存
void close() throws Exception
這個方法關閉調用對象,釋放可能佔用的全部資源。在帶資源的try語句的末尾,會自動調用該方法,所以消除了顯式調用close()方法的須要。spa
Closeable接口也定義了close()方法。實現了Closeable接口的類的對象能夠被關閉。從JDK7開始,Closeable擴展了AutoCloseable。所以,在JDK7中,全部實現了Closeable接口的類也都實現了AutoCloseable接口。code
實現了Flushable接口的類的對象,能夠強制將緩存的輸出寫入到與對象關聯的流中。該接口定義了flush()方法,以下所示:對象
void flush() throws IOException
刷新流一般會致使緩存的輸出被物理地寫入到底層設備中。寫入流的全部I/O類都實現了Flushable接口。接口
注:關於帶資源的try語句的3個關鍵點:資源
由帶資源的try語句管理的資源必須是實現了AutoCloseable接口的類的對象。作用域
在try代碼中聲明的資源被隱式聲明爲fianl。io
經過使用分號分隔每一個聲明能夠管理多個資源。class
此外請記住,所聲明資源的做用域被限制在帶資源的try語句中。帶資源的try語句的主要優勢是:當try代碼塊結束時,資源(在此時流)會被自動關閉。所以,不太可能會忘記關閉流。使有帶資源的try語句,一般能夠使源代碼更短,更清晰,更容易維護。如例:
package io; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStreamReader; public class InputStreamReaderTest { public static void main(String[] args) { try(BufferedReader reader = new BufferedReader(new InputStreamReader( new FileInputStream(new File("/home/fuhd/text")),"UTF8"),1024)){ System.out.println(reader.readLine()); //這裏直接讀一行 }catch(IOException e){ e.printStackTrace(); } } }