亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

Java? 教程(字符流)

mochixuan / 2009人閱讀

字符流

Java平臺(tái)使用Unicode約定存儲(chǔ)字符值,字符流I/O自動(dòng)將此內(nèi)部格式與本地字符集進(jìn)行轉(zhuǎn)換,在Western語(yǔ)言環(huán)境中,本地字符集通常是ASCII的8位超集。

對(duì)于大多數(shù)應(yīng)用程序,具有字符流的I/O并不比具有字節(jié)流的I/O復(fù)雜,使用流類完成的輸入和輸出會(huì)自動(dòng)轉(zhuǎn)換為本地字符集和從本地字符集轉(zhuǎn)換,使用字符流代替字節(jié)流的程序會(huì)自動(dòng)適應(yīng)本地字符集并為國(guó)際化做了準(zhǔn)備 — 所有這些都無(wú)需程序員的額外努力。

如果國(guó)際化不是優(yōu)先事項(xiàng),你可以簡(jiǎn)單地使用字符流類,而不必過多關(guān)注字符集問題,之后,如果國(guó)際化成為優(yōu)先事項(xiàng),你的程序可以進(jìn)行調(diào)整而無(wú)需進(jìn)行大量重新編碼。

使用字符流

所有字符流類都派生自Reader和Writer,與字節(jié)流一樣,有專門用于文件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();
            }
        }
    }
}

CopyCharactersCopyBytes非常相似,最重要的區(qū)別是CopyCharacters使用FileReaderFileWriter代替FileInputStreamFileOutputStream進(jìn)行輸入和輸出。請(qǐng)注意,CopyBytesCopyCharacters都使用int變量來(lái)讀取和寫入,但是,在CopyCharacters中,int變量在其最后16位中保存一個(gè)字符值,在CopyBytes中,int變量在其最后8位中保存一個(gè)字節(jié)值。

使用字節(jié)流的字符流

字符流通常是字節(jié)流的“包裝器”,字符流使用字節(jié)流來(lái)執(zhí)行物理I/O,而字符流處理字符和字節(jié)之間的轉(zhuǎn)換,例如,FileReader使用FileInputStream,而FileWriter使用FileOutputStream

有兩種通用的字節(jié)到字符“橋接”流:InputStreamReader和OutputStreamWriter,當(dāng)沒有符合你需求的預(yù)打包字符流類時(shí),使用它們來(lái)創(chuàng)建字符流。

面向行的I/O

字符I/O的單位通常比單個(gè)字符大,一個(gè)常見的單位是行:一串字符,末尾有一個(gè)行終止符,行終止符可以是回車/換行序列(“ ”),單個(gè)回車符(“ ”)或單個(gè)換行符(“ ”),支持所有可能的行終止符允許程序讀取在任何廣泛使用的操作系統(tǒng)上創(chuàng)建的文本文件。

讓我們修改CopyCharacters示例以使用面向行的I/O,為此,我們必須使用兩個(gè)我們以前從未見過的類,BufferedReader和PrintWriter。

CopyLines示例調(diào)用BufferedReader.readLinePrintWriter.println來(lái)一次輸入和輸出一行。

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();
            }
        }
    }
}

調(diào)用readLine會(huì)返回一行文本,CopyLines使用println輸出每一行,println附加當(dāng)前操作系統(tǒng)的行終止符,這可能與輸入文件中使用的行終止符不同。

有許多方法可以在字符和行之外構(gòu)建文本輸入和輸出,有關(guān)更多信息,請(qǐng)參閱掃描和格式化。

上一篇:字節(jié)流 下一篇:緩沖流

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/72967.html

相關(guān)文章

  • Java? 教程(目錄)

    Java? 教程 Java教程是為JDK 8編寫的,本頁(yè)面中描述的示例和實(shí)踐沒有利用在后續(xù)版本中引入的改進(jìn)。 Java教程是希望使用Java編程語(yǔ)言創(chuàng)建應(yīng)用程序的程序員的實(shí)用指南,其中包括數(shù)百個(gè)完整的工作示例和數(shù)十個(gè)課程,相關(guān)課程組被組織成教程。 覆蓋基礎(chǔ)知識(shí)的路徑 這些教程以書籍的形式提供,如Java教程,第六版,前往Amazon.com購(gòu)買。 入門 介紹Java技術(shù)和安裝Java開發(fā)軟件并使用...

    lifesimple 評(píng)論0 收藏0
  • Java? 教程(命令行I/O)

    命令行I/O 程序通常從命令行運(yùn)行,并在命令行環(huán)境中與用戶交互,Java平臺(tái)以兩種方式支持這種交互:通過標(biāo)準(zhǔn)流和控制臺(tái)。 標(biāo)準(zhǔn)流 標(biāo)準(zhǔn)流是許多操作系統(tǒng)的一個(gè)特性,默認(rèn)情況下,它們從鍵盤讀取輸入并將輸出寫入顯示器,它們還支持文件和程序之間的I/O,但該功能由命令行解釋器控制,而不是程序。 Java平臺(tái)支持三種標(biāo)準(zhǔn)流:標(biāo)準(zhǔn)輸入,可通過System.in訪問;標(biāo)準(zhǔn)輸出,可通過System.out訪問;和...

    jeyhan 評(píng)論0 收藏0
  • Java? 教程(格式化

    格式化流 實(shí)現(xiàn)格式化的流對(duì)象是PrintWriter(字符流類)或PrintStream(字節(jié)流類)的實(shí)例。 你可能需要的唯一PrintStream對(duì)象是System.out和System.err(有關(guān)這些對(duì)象的更多信息,請(qǐng)參閱命令行中的I/O),當(dāng)你需要?jiǎng)?chuàng)建格式化的輸出流時(shí),請(qǐng)實(shí)例化PrintWriter,而不是PrintStream。 與所有字節(jié)和字符流對(duì)象一樣,PrintStream和Pri...

    Render 評(píng)論0 收藏0
  • Java? 教程(字節(jié)

    字節(jié)流 程序使用字節(jié)流來(lái)執(zhí)行8位字節(jié)的輸入和輸出,所有的字節(jié)流類都是從InputStream和OutputStream派生出來(lái)的。 有許多字節(jié)流類,為了演示字節(jié)流的工作原理,我們將重點(diǎn)關(guān)注文件I/O字節(jié)流,F(xiàn)ileInputStream和FileOutputStream,其他類型的字節(jié)流以大致相同的方式使用,它們的不同之處主要在于它們的構(gòu)造方式。 使用字節(jié)流 我們將通過檢查名為CopyBytes的...

    Cristic 評(píng)論0 收藏0
  • Java? 教程(緩沖

    緩沖流 到目前為止,我們看到的大多數(shù)示例都使用無(wú)緩沖的I/O,這意味著每個(gè)讀取或?qū)懭胝?qǐng)求都由底層操作系統(tǒng)直接處理,這可以使程序效率低得多,因?yàn)槊總€(gè)這樣的請(qǐng)求通常觸發(fā)磁盤訪問、網(wǎng)絡(luò)活動(dòng)或一些相對(duì)昂貴的其他操作。 為了減少這種開銷,Java平臺(tái)實(shí)現(xiàn)了緩沖的I/O流,緩沖輸入流從稱為緩沖區(qū)的內(nèi)存區(qū)讀取數(shù)據(jù),僅當(dāng)緩沖區(qū)為空時(shí)才調(diào)用原生輸入API,類似地,緩沖輸出流將數(shù)據(jù)寫入緩沖區(qū),并且僅在緩沖區(qū)已滿時(shí)才調(diào)...

    gougoujiang 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

mochixuan

|高級(jí)講師

TA的文章

閱讀更多
最新活動(dòng)
閱讀需要支付1元查看
<