天天看點

Java中IO架構——OutputStream源碼解析方法

抽象類 OutputStream 實作了 Closeable 和 Flushable 接口。是以 OutputStream 中有對應 close 和 flush 方法的實作。

OutputStream 和 InputStream 相對應。

InputStream 的源碼分析見:http://blog.csdn.net/yx0628/article/details/79343633

方法

write(int b)

将指定的一個位元組寫入此輸出流。int 值為 4 個位元組,此方法丢棄 int 類型高位的 3 個位元組,隻保留低位的 1 個位元組寫入(對位元組來說,轉為 int 其 3 個高位位元組都是全 0 的,是以可以丢棄)。此方法是抽象方法,子類必須要進行實作。

public abstract void write(int b) throws IOException;
           

write(byte b[])

将 b.length 個位元組從指定的 byte 數組寫入此輸出流。調用下邊的 write 方法。

public void write(byte b[]) throws IOException {
        write(b, , b.length);
    }
           

write(byte b[], int off, int len)

将指定 byte 數組中從偏移量 off 開始的 len 個位元組寫入此輸出流。

public void write(byte b[], int off, int len) throws IOException {
        // 如果位元組數組為空,抛出異常
        if (b == null) {
            throw new NullPointerException();
        } else if ((off < ) || (off > b.length) || (len < ) ||
                   ((off + len) > b.length) || ((off + len) < )) {
            // 如果下标及範圍不合适,抛出範圍異常。
            throw new IndexOutOfBoundsException();
        } else if (len == ) {
            // 如果寫入長度為0,不需要處理
            return;
        }
        // 從off下标處開始寫入每一個位元組到輸出流。
        for (int i =  ; i < len ; i++) {
            write(b[off + i]);
        }
    }
           

flush()

重新整理此輸出流并強制寫出所有緩沖的輸出位元組。此類未實作具體行為,子類應該複寫此方法。

public void flush() throws IOException {
    }
           

close()

關閉此輸出流并釋放與此流有關的所有系統資源,此類未實作具體行為,子類應該複寫此方法。

public void close() throws IOException {
    }