[十四]JavaIO之PrintStream

功能簡介
 
PrintStream 爲其餘輸出流添加了功能,使它們可以方便地打印各類數據值表示形式
裝飾器模式中具體的裝飾類
它提供的功能就是便捷的打印各類數據形式
FilterInputStream爲裝飾器模式中的抽象角色
簡言之,PrintStream能夠快捷的打印輸出各類類型的數據
 
image_5b99212b_1dce
關鍵字段
 
autoFlush是否自動刷新的標誌位
所謂自動刷新,就是每次調用方法後,看下標誌位,若是設置了,那麼調用一下out.flush()
好比下面這段代碼

image_5b99212b_703d

因此,爲了自動刷新,能夠建立一個 PrintStream
這個autoFlush 會在:
寫入byte數組以後,println調用,寫入一個換行符,或者寫入一個  '\n'
數組

這幾種場景下自動刷新(若是是true)app

 
 
構造方法
先看下他的私有的構造方法
其餘全部的方法都是調用這兩個構造方法

image_5b99212b_76d8
兩個私有構造方法, 關注的主要信息就是OutputStream和autoFlush和 charset三個字段
OutputStream 做爲實際被裝飾的實體類
charset 指定的字符編碼,若是不指定,那麼將會使用默認的

autoFlush  默認是false
PrintStream(OutputStream)
PrintStream(OutputStream, boolean)
PrintStream(OutputStream, boolean, String)
直接傳遞OutputStream
PrintStream(String)
PrintStream(String, String)
PrintStream(File)
PrintStream(File, String)
經過File或者路徑名 構造FileOutputStream  做爲FileOutputStream
能夠看得出來,文件相關的,autoFlush所有都是false
 
 
 
PrintStream 永遠不會拋出 IOException
經過代碼能夠看得出來
內部維護了一個trouble標誌位
發生了IOException異常時,捕捉後轉換爲trouble=true
能夠經過checkError()方法進行返回
image_5b99212b_1d86

 
主要方法介紹

write方法
write(int)
write(byte[], int, int)
說到這,write基本不用介紹了,代碼上面一段也已經貼出來
增長了自動刷新的功能,而且還不會拋出異常
 
print系列
println() 經過寫入行分隔符字符串終止當前行。行分隔符字符串由系統屬性 line.separator 定義,不必定是單個換行符 ('\n') 
 
print(boolean)
String.valueOf(boolean)生成字符串轉換爲字節
以 write(int) 方法的方式寫入這些字節
+println() =  println(boolean)
print(char)
字符轉換爲一個或多個字節
以 write(int) 方法的方式寫入這些字節
+println() =  println(char)
print(int)
String.valueOf(int)生成字符串轉換爲字節
以 write(int) 方法的方式寫入這些字節
+println() = println(int)
print(long)
String.valueOf(long)生成字符串轉換爲字節
以 write(int) 方法的方式寫入這些字節
+println() = println(long)
print(float)
String.valueOf(float)生成字符串轉換爲字節
以 write(int) 方法的方式寫入這些字節
+println() = println(float)
print(double)
String.valueOf(double)生成字符串轉換爲字節
以 write(int) 方法的方式寫入這些字節
+println() = println(double)
print(char[])
字符轉換爲字節
以 write(int) 方法的方式寫入這些字節
+println() = println(char[])
print(String)
若是參數爲 null,則打印字符串 "null"
不然轉換爲字節
以 write(int) 方法的方式寫入這些字節
+println() = println(String)
print(Object)
String.valueOf(Object)生成字符串轉換爲字節
以 write(int) 方法的方式寫入這些字節
不存在print(Object) +println()的狀況
println(Object)==先調用 String.valueOf(x) 獲取字符串值,而後再 print(String)+ println()
 
print將會把數據轉換爲他們的字符串形式,而後轉換爲字節,而後在將字節寫入
print 與println結合 能夠變成println的形式
從代碼也能夠很直白的看出來,調用以後,而後newLine()
不過須要注意的是print(Object)  他是特例

image_5b99212b_5725
 
 
printf(String, Object...)
printf(Locale, String, Object...)
format(String, Object...)
format(Locale, String, Object...)
image_5b99212b_7c37
產生格式化輸出的每一個方法都須要格式字符串 和參數列表
格式字符串是一個 String,它能夠包含固定文本以及一個或多個嵌入的格式說明符
這個是個相似C語言printf的方法
使用的時候不熟悉直接查表對照便可
printf和format一回事
 
append(char)
 
將指定字符添加到此輸出流。
調用此方法的 out.append(c) 形式,行爲與如下調用徹底相同:out.print(c)
最後加一個跟寫一個顯然沒什麼不一樣
append(CharSequence)
將指定字符序列添加到此輸出流
append(CharSequence, int, int) 將指定字符序列的子序列添加到此輸出流
 
flush()
close()
相關文章
相關標籤/搜索