天天看點

“有限”的OutputStream | 帶你學《Java語言進階特性》之六十四

“一目十行”的RandomAccessFile類 | 帶你學《Java語言進階特性》之六十三

在日常開發中,Java的标準包有時隻能滿足開發使用的最低标準,OutputStream便是如此。本節将為讀者介紹針對OutputStream類進行自定義開發實作優化輸出功能的方法。

【本節目标】

通過閱讀本節内容,你将了解到OutputStream在輸出操作方面有限的功能,了解到“裝飾設計模式”的基本思想,學會通過對OutputStream類的定制完成對輸出操作的優化。

列印流

如果要想通過程式實作内容的輸出,核心的本質一定要依靠OutputStream類完成,但是OutputStream有一個很大的缺點:這個類的資料輸出操作功能有限:public void write(byte[] b) throws IOException,所有的資料一定要轉為位元組數組後才能輸出,假設現在項目裡面可能輸出的是long、double、Date,這種情況下就必須将這些資料變為位元組的形式來處理,這樣的處理一定是非常麻煩的,是以在開發之中最初的時候為了解決此類的重複操作,往往會由開發者自行定義一些功能類已簡化輸出過程。

範例:列印流設計思想

import java.io.File;
import java.io.FileOutputStream;
import java.io.Exception;
import java.io.OutputStream;
public class JavaAPIDemo {
    public static void main(String[] args) throws Exception {
        File file = new File("d:" + File.separator +"mldn.txt");   //定義操作檔案
        PrintUtil pu= new PrintUtil(new FileOutputStream(file));
        pu.println("姓名:小強子");
        pu.print("年齡:");
        pu.println(78);
        pu.close();
    }
}
class PrintUtil implements AutoCloseable {   //實作一些常用資料的輸出
    private OutputStream output;  //不管現在如何進行輸出操作,核心使用的就是OutputStream

    public PrintUtil(OutputStream output) {    //由外部來決定輸出的位置
        this.output = output;
    }
    @Override
    public void close() throws Exception {
        this.output.close();
        
    }

    public void print(String str) {   //輸出字元串
        try {
            this.output.write(str.getBytes());  //輸出
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    public void println(String str) {
        this.print(str + "\r\n");
    }
    public void print(long num) {
        this.print(String.valueOf(num));
    }
    public void println(long num) {
        this.println(String.valueOf(num));
    }
    
}           

在整個操作過程之中列印流的設計思想的本質在于:提高已有類的功能,例如:OutputStream是唯一可實作輸出的操作标準類,是以應該以其為核心根本,但是這個類的輸出的操作功能有限,是以不友善進行輸出各個資料類型,那麼就為它做出了一層包裝,是以此時采用的設計思想就是“裝飾設計模式”。

想學習更多的Java的課程嗎?從小白到大神,從入門到精通,更多精彩不容錯過!免費為您提供更多的學習資源。

本内容視訊來源于

阿裡雲大學 下一篇:使用列印流優化資料輸出 | 帶你學《Java語言進階特性》之六十五 更多Java面向對象程式設計文章檢視此處