1. 程式人生 > >系統學習 Java IO (七)----位元組陣列流 ByteArrayInputStream/ByteArrayOutputStream

系統學習 Java IO (七)----位元組陣列流 ByteArrayInputStream/ByteArrayOutputStream

目錄:系統學習 Java IO---- 目錄,概覽

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();
        }
    }
}