前面已經瞭解了輸入流《從JDK源碼看InputStream》,接着看對應的輸出流,JDK 給咱們提供了不少實用的輸出流 xxxOutputStream,而 OutputStream 是全部字節輸出流的抽象。包括 ByteArrayOutputStream 、FilterOutputStream 、BufferedOutputStream 、DataOutputStream 和 PushbackOutputStream 等等。java
--java.lang.Object
--java.io.OutputStream
複製代碼
public abstract class OutputStream implements Closeable, Flushable
複製代碼
OutputStream 被定爲 public 且 abstract 的類,實現了 Closeable 和 Flushable 接口。數組
Closeable 接口表示 OutputStream 能夠被close,接口定義以下:bash
public interface Closeable extends AutoCloseable {
public void close() throws IOException;
}
複製代碼
而 Flushable 接口表示 OutputStream 能夠進行 flush 操做,接口定義以下。併發
public interface Flushable {
void flush() throws IOException;
}
複製代碼
沒有屬性機器學習
一共有三個 write 方法,其中有一個抽象的 write 方法,其他兩個 write 方法都會調用這個抽象方法,該方法用於將一個字節寫入一個輸出流讀。分佈式
主要看第三個 write 方法便可,它傳入的三個參數,byte數組、偏移量和數組長度。該方法主要是將指定長度的字節數據寫入到輸出流中,而在寫入前會檢查數組是否爲空,偏移量和長度是否知足正確的條件等等。最後纔是調用抽象方法進行寫操做,抽象方法通常都由子類實現具體的邏輯。學習
public abstract void write(int b) throws IOException;
public void write(byte b[]) throws IOException {
write(b, 0, b.length);
}
public void write(byte b[], int off, int len) throws IOException {
if (b == null) {
throw new NullPointerException();
} else if ((off < 0) || (off > b.length) || (len < 0) ||
((off + len) > b.length) || ((off + len) < 0)) {
throw new IndexOutOfBoundsException();
} else if (len == 0) {
return;
}
for (int i = 0 ; i < len ; i++) {
write(b[off + i]);
}
}
複製代碼
對該輸出流中緩衝的字節進行 flush 操做,即以前寫入該輸出流緩衝區的字節將被強制 flush 到目的地。其中目的地可能的狀況爲:spa
public void flush() throws IOException {}
複製代碼
此方法用於關閉輸出流,而且釋放相關資源,做爲抽象類,這裏關閉動做不作任何事。另外關閉了的流沒法再從新打開。操作系統
public void close() throws IOException {}
複製代碼
=============廣告時間===============.net
公衆號的菜單已分爲「分佈式」、「機器學習」、「深度學習」、「NLP」、「Java深度」、「Java併發核心」、「JDK源碼」、「Tomcat內核」等,可能有一款適合你的胃口。
鄙人的新書《Tomcat內核設計剖析》已經在京東銷售了,有須要的朋友能夠購買。感謝各位朋友。
=========================
相關閱讀:
歡迎關注: