字符流
Java平臺使用Unicode約定存儲字符值,字符流I/O自動將此內部格式與本地字符集進行轉換,在Western語言環境中,本地字符集通常是ASCII的8位超集。
對于大多數應用程序,具有字符流的I/O并不比具有字節流的I/O復雜,使用流類完成的輸入和輸出會自動轉換為本地字符集和從本地字符集轉換,使用字符流代替字節流的程序會自動適應本地字符集并為國際化做了準備 — 所有這些都無需程序員的額外努力。
如果國際化不是優先事項,你可以簡單地使用字符流類,而不必過多關注字符集問題,之后,如果國際化成為優先事項,你的程序可以進行調整而無需進行大量重新編碼。
使用字符流所有字符流類都派生自Reader和Writer,與字節流一樣,有專門用于文件I/O的字符流類:FileReader和FileWriter,CopyCharacters示例說明了這些類。
import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; public class CopyCharacters { public static void main(String[] args) throws IOException { FileReader inputStream = null; FileWriter outputStream = null; try { inputStream = new FileReader("xanadu.txt"); outputStream = new FileWriter("characteroutput.txt"); int c; while ((c = inputStream.read()) != -1) { outputStream.write(c); } } finally { if (inputStream != null) { inputStream.close(); } if (outputStream != null) { outputStream.close(); } } } }
CopyCharacters與CopyBytes非常相似,最重要的區別是CopyCharacters使用FileReader和FileWriter代替FileInputStream和FileOutputStream進行輸入和輸出。請注意,CopyBytes和CopyCharacters都使用int變量來讀取和寫入,但是,在CopyCharacters中,int變量在其最后16位中保存一個字符值,在CopyBytes中,int變量在其最后8位中保存一個字節值。
使用字節流的字符流字符流通常是字節流的“包裝器”,字符流使用字節流來執行物理I/O,而字符流處理字符和字節之間的轉換,例如,FileReader使用FileInputStream,而FileWriter使用FileOutputStream。
有兩種通用的字節到字符“橋接”流:InputStreamReader和OutputStreamWriter,當沒有符合你需求的預打包字符流類時,使用它們來創建字符流。
面向行的I/O字符I/O的單位通常比單個字符大,一個常見的單位是行:一串字符,末尾有一個行終止符,行終止符可以是回車/換行序列(“ ”),單個回車符(“ ”)或單個換行符(“ ”),支持所有可能的行終止符允許程序讀取在任何廣泛使用的操作系統上創建的文本文件。
讓我們修改CopyCharacters示例以使用面向行的I/O,為此,我們必須使用兩個我們以前從未見過的類,BufferedReader和PrintWriter。
CopyLines示例調用BufferedReader.readLine和PrintWriter.println來一次輸入和輸出一行。
import java.io.FileReader; import java.io.FileWriter; import java.io.BufferedReader; import java.io.PrintWriter; import java.io.IOException; public class CopyLines { public static void main(String[] args) throws IOException { BufferedReader inputStream = null; PrintWriter outputStream = null; try { inputStream = new BufferedReader(new FileReader("xanadu.txt")); outputStream = new PrintWriter(new FileWriter("characteroutput.txt")); String l; while ((l = inputStream.readLine()) != null) { outputStream.println(l); } } finally { if (inputStream != null) { inputStream.close(); } if (outputStream != null) { outputStream.close(); } } } }
調用readLine會返回一行文本,CopyLines使用println輸出每一行,println附加當前操作系統的行終止符,這可能與輸入文件中使用的行終止符不同。
有許多方法可以在字符和行之外構建文本輸入和輸出,有關更多信息,請參閱掃描和格式化。
上一篇:字節流 下一篇:緩沖流文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/72967.html
Java? 教程 Java教程是為JDK 8編寫的,本頁面中描述的示例和實踐沒有利用在后續版本中引入的改進。 Java教程是希望使用Java編程語言創建應用程序的程序員的實用指南,其中包括數百個完整的工作示例和數十個課程,相關課程組被組織成教程。 覆蓋基礎知識的路徑 這些教程以書籍的形式提供,如Java教程,第六版,前往Amazon.com購買。 入門 介紹Java技術和安裝Java開發軟件并使用...
命令行I/O 程序通常從命令行運行,并在命令行環境中與用戶交互,Java平臺以兩種方式支持這種交互:通過標準流和控制臺。 標準流 標準流是許多操作系統的一個特性,默認情況下,它們從鍵盤讀取輸入并將輸出寫入顯示器,它們還支持文件和程序之間的I/O,但該功能由命令行解釋器控制,而不是程序。 Java平臺支持三種標準流:標準輸入,可通過System.in訪問;標準輸出,可通過System.out訪問;和...
格式化流 實現格式化的流對象是PrintWriter(字符流類)或PrintStream(字節流類)的實例。 你可能需要的唯一PrintStream對象是System.out和System.err(有關這些對象的更多信息,請參閱命令行中的I/O),當你需要創建格式化的輸出流時,請實例化PrintWriter,而不是PrintStream。 與所有字節和字符流對象一樣,PrintStream和Pri...
字節流 程序使用字節流來執行8位字節的輸入和輸出,所有的字節流類都是從InputStream和OutputStream派生出來的。 有許多字節流類,為了演示字節流的工作原理,我們將重點關注文件I/O字節流,FileInputStream和FileOutputStream,其他類型的字節流以大致相同的方式使用,它們的不同之處主要在于它們的構造方式。 使用字節流 我們將通過檢查名為CopyBytes的...
緩沖流 到目前為止,我們看到的大多數示例都使用無緩沖的I/O,這意味著每個讀取或寫入請求都由底層操作系統直接處理,這可以使程序效率低得多,因為每個這樣的請求通常觸發磁盤訪問、網絡活動或一些相對昂貴的其他操作。 為了減少這種開銷,Java平臺實現了緩沖的I/O流,緩沖輸入流從稱為緩沖區的內存區讀取數據,僅當緩沖區為空時才調用原生輸入API,類似地,緩沖輸出流將數據寫入緩沖區,并且僅在緩沖區已滿時才調...
閱讀 1548·2023-04-26 02:50
閱讀 3555·2023-04-26 00:28
閱讀 1941·2023-04-25 15:18
閱讀 3225·2021-11-24 10:31
閱讀 1000·2019-08-30 13:00
閱讀 1008·2019-08-29 15:19
閱讀 1778·2019-08-29 13:09
閱讀 2985·2019-08-29 13:06