探究java IO之AutoCloseable,Closeable和Flushable接口

有3個接口對於流類至關重要。其中兩個接口是CloseableFlushable,它們是在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代碼中聲明的資源被隱式聲明爲fianlio

  • 經過使用分號分隔每一個聲明能夠管理多個資源。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();
        }
    }
}
相關文章
相關標籤/搜索