系統學習 Java IO (七)----位元組陣列流 ByteArrayInputStream/ByteArrayOutputStream
阿新 • • 發佈:2018-11-24
ByteArrayInputStream
如果資料儲存在陣列中,ByteArrayInputStream 可以很方便讀取,它可以返回 InputStream , 這樣,ByteArrayInputStream 可以包裝位元組陣列,並將其轉換為流。
構造器 public ByteArrayInputStream(@NotNull byte[] buf)
建立一個 ByteArrayInputStream ,以便它使用 buf 作為其緩衝區陣列。 pos 的初始值為 0 ,count 的初始值為 buf 的長度。
注意:關閉 ByteArrayInputStream 無效。此類中的方法在關閉此流後仍可被呼叫,而不會產生任何 IOException。
ByteArrayOutputStream
建立一個新的位元組陣列輸出流。 緩衝區容量最初為32位元組,但必要時其大小會增加。
構造器
OutputStream output = new ByteArrayOutputStream();
建立一個32位元組(預設大小)的緩衝區。
ByteArrayOutputStream(int size)
建立一個新的 byte 陣列輸出流,它具有指定大小的緩衝區容量(以位元組為單位)。
可以將資料寫入 ByteArrayOutputStream ,完成後,呼叫 ByteArrayOutputStream 的方法 toByteArray() 以獲取位元組陣列中的所有寫入資料。
byte[] bytes = output.toByteArray();
同樣,關閉 ByteArrayOutputStream 無效。此類中的方法在關閉此流後仍可被呼叫,而不會產生任何 IOException 。
如果有一個程式需要將其資料輸出到 OutputStream ,但我們需要其返回位元組陣列的情況下,ByteArrayOutputStream 可以很方便完成任務。
很明顯 ByteArrayOutputStream 是用來快取資料的,向它的內部自動增長的緩衝區寫入資料,再通過 output.toByteArray()
可以從中提取資料。
一個例子:
public class ByteArray { public static void main(String[] args) throws IOException { ByteArrayOutputStream output = new ByteArrayOutputStream(); output.write("Hello ByteArray".getBytes()); // 只需呼叫方法 toByteArray(),所有寫入的資料都以陣列形式返回。 byte[] bytes = output.toByteArray(); InputStream input = new ByteArrayInputStream(bytes); try { int data = input.read(); while (data != -1) { System.out.print((char) data); data = input.read(); } System.out.println(); } catch ( IOException e) { e.printStackTrace(); } } }