[十四]JavaIO之PrintStream

来源:https://www.cnblogs.com/noteless/archive/2018/09/12/9637806.html
-Advertisement-
Play Games

功能簡介 PrintStream 為其他輸出流添加了功能,使它們能夠方便地列印各種數據值表示形式 裝飾器模式中具體的裝飾類 它提供的功能就是便捷的列印各種數據形式 FilterInputStream為裝飾器模式中的抽象角色 簡言之,PrintStream可以快捷的列印輸出各種類型的數據 PrintS ...


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

image_5b99212b_703d

所以,為了自動刷新,可以創建一個 PrintStream
這個autoFlush 會在:
寫入byte數組之後,println調用,寫入一個換行符,或者寫入一個  '\n'

這幾種場景下自動刷新(如果是true)

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

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()      
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 閉包 ———— 個人理解簡述 閉包在某種含義上其本身其實也是一個函數。 定義的格式簡單來說為在一個函數內部再創建一個函數, 也就是一個外函數包裹了一個內函數, 在內函數里使用了外函數的臨時變數, 外函數的“return”返回值為內函數的引用(函數名)。 在形式上與迴圈嵌套有些相似, 暫且也可稱之為函 ...
  • 前言 最近準備整理一下框架學習的只是,發現不管是RPC框架,還是Spring的框架,Mybatis的框架都有很多地方地方用到了動態代理的方式,例如我們強大的Spring AOP、Mybatis中的介面方法查詢都是用到了JDK動態代理,為了後期鞏固知識的方便,我希望自己能從基礎入手,真正理解框架。也要 ...
  • 基於AQS的前世今生,來學習併發工具類ReentrantReadWriteLock。本文將從ReentrantReadWriteLock的產生背景、源碼原理解析和應用來學習這個併發工具類。 1、 產生背景 前面我們學習的重入鎖ReentrantLock本質上還是互斥鎖,每次最多只能有一個線程持有Re ...
  • Java介紹 是一門面向對象的程式設計的編程語言,在 年, 公司發佈了 這門編程語言,有咖啡的名稱,是當時靈機一動的想法。在 年的時候被 公司收購了,目前 的版本是 了。 那麼什麼是 呢?學習 必須要有 ,那麼我們現在去下載吧!根據下方給的自己就可以找到了。 下載地址 下載jdk,和eclipse就 ...
  • 原創 C++中內置了sor函數供排序,函數原型為: 如果要進行降序排序,需要另外定義cmp函數: 另外還可以對string和結構體進行排序: 22:37:40 2018-09-12 ...
  • 一、認識LInux系統 1、Linux下一切皆文件; 2、Linux下所有文件都是保存在根目錄下的 /; 3、根目錄下的文件(大致) /bin :保存二進位文件的目錄; /boot:用來保存系統啟動時需要的代碼程式; /dev:所有外設所在的根目錄; /etc:配置文件所在目錄; /home:普通用 ...
  • 今天主要介紹一下在Windows下安裝pyspider,pyspider是一款用python編寫的網路爬蟲框架,這個框架最好是在linux下運行,Windows下運行可能會出現相容性問題,如果實在要在Windows下運行,最好選擇32位版本,64位版本可能會出現運行崩潰問題。 1、要安裝pyspid ...
  • # 文件的刷新flash# 為什麼要刷新文件呢?# 首先我們就要知道電腦是怎麼儲存信息的,# 寫的代碼保存在緩存中當緩存滿了之後就會將內容儲存到硬碟中。# 那這個跟刷新有什麼關係呢?# 系統也會自動儲存信息但是儲存信息不及時,當也及時反饋一些信息時會滯後# 或者重要信息要存儲至電腦中,避免意外情況導 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...