Java IO: ByteArray和Filter
作者: Jakob Jenkov 譯者: 李璟([email protected])
本小節會簡要概括Java IO中位元組陣列與過濾器的輸入輸出流,主要涉及以下4個型別的流:ByteArrayInputStream,ByteArrayOutputStream,FilterInputStream,FilterOutputStream。請注意,為了清晰,這裡忽略了必要的異常處理。想了解更多異常處理的資訊,請參考Java IO異常處理。
ByteArrayInputStream
ByteArrayInputStream允許你從位元組陣列中讀取位元組流資料,程式碼如下:
byte[] bytes = ... //get byte array from somewhere. InputStream input = new ByteArrayInputStream(bytes); int data = input.read(); while(data != -1) { //do something with data data = input.read(); } input.close();
如果資料儲存在陣列中,ByteArrayInputStream可以很方便地讀取資料。如果你有一個InputStream變數,又想從陣列中讀取資料呢?很簡單,只需要把位元組陣列傳遞給ByteArrayInputStream的建構函式,在把這個ByteArrayInputStream賦值給InputStream變數就可以了(譯者注:InputStream是所有位元組輸入流流的基類,Reader是所有字元輸入流的基類,OutputStream與Writer同理)。
ByteArrayOutputStream
ByteArrayOutputStream允許你以陣列的形式獲取寫入到該輸出流中的資料,程式碼如下:
ByteArrayOutputStream output = new ByteArrayOutputStream(); //write data to output stream byte[] bytes = output.toByteArray();
FilterInputStream
FilterInputStream是實現自定義過濾輸入流的基類,基本上它僅僅只是覆蓋了InputStream中的所有方法。
就我自己而言,我沒發現這個類明顯的用途。除了建構函式取一個InputStream變數作為引數之外,我沒看到FilterInputStream任何對InputStream新增或者修改的地方。如果你選擇繼承FilterInputStream實現自定義的類,同樣也可以直接繼承自InputStream從而避免額外的類層級結構。
FilterOutputStream
內容同FilterInputStream,不再贅述。