Ravi Wu
InputStream 、 DataInputStream 與 BufferedInputStream
Java 有很多不同的 InputStream 類別,老是搞不清楚,InputStream
、DataInputStream
跟BufferedInputStream
最近出現在我看的書的練習題裡,一些從 Java Doc (1.8) 文件中拉出來的相關連結:
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
方法,透過額外使用的緩衝空間來先讀入資料,以優化資料讀入的效能。