Tag specification

InputStream 、 DataInputStream 與 BufferedInputStream

Java 有很多不同的 InputStream 類別,老是搞不清楚,InputStream、DataInputStream跟BufferedInputStream最近出現在我看的書的練習題裡,一些從 Java Doc (1.8) 文件中拉出來的相關連結: Closeable FilterInputStream InputStream DataInputStream BufferedInputStream InputStream是抽象類別,實踐了Closeable,所以可以當成try with resource裡的資源。類別方法裡定義了InputStream.nullInputStream()可以產生空的InputStream。另外也規範所有實作子類別必須提供public int read() throws IOException方法來回傳下一個 byte 的內容。 FilterInputStream在生成時吃進InputStream後把InputStream存起來,並且覆寫了所有InputStream裡的方法,大部分覆寫的方法都是把原來的操作轉到物件生成時丟進去的InputStream上,以供更細分的子類別使用,例如: public int read(byte b[], int off, int len) throws IOException { return in.read(b, off, len); } DataInputStream跟BufferedInputStream都進一步繼承FilterInputStream。DataInputStream主要是從InputStream直接讀入 Java 的 primitive data type。 BufferedInputStream在內部會產生一個緩衝陣列(buffer array)來支援mark跟reset方法,透過額外使用的緩衝空間來先讀入資料,以優化資料讀入的效能。