0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

java的字符流分析

科技綠洲 ? 來(lái)源:Java技術(shù)指北 ? 作者:Java技術(shù)指北 ? 2023-10-10 15:38 ? 次閱讀

上次聊到了 java字符流 Reader,今天來(lái)看看它的好朋友 Writer 字符流。

Writer

java 中的 IO 輸出流不是只有 OutputStream 還有按字符輸出的 Writer。

OutputStreamWriter
字節(jié)流,以 byte 為單位字符流,以 char 為單位
輸出字節(jié)(0~255):void write(int b)輸出字符(0~65535):void write(int c)
輸出字節(jié)數(shù)組:void write(byte[] b)輸出字符數(shù)組:void write(char[] c)

和 OutputStream 一樣,Writer 也是所有字符輸出流的超類。主要的方法是:public void write(char cbuf[]) throws IOException, write() 方法將 cbuf 參數(shù)全部輸出,write(String str) 和 write(int c) 兩個(gè)方法最終調(diào)用的還是 write(char cbuf[])

FileWriter

FileWriter 就是向文件中寫(xiě)入字符流的 Writer。new FileWriter(fileName) 構(gòu)造函數(shù)是將文件從頭開(kāi)始寫(xiě)入并不是在文件結(jié)尾處繼續(xù)寫(xiě)入。new FileWriter(fileName, true) 則是在文件結(jié)尾處寫(xiě)入。

private void fileWriteDemo() throws IOException {
    Writer writer = new FileWriter("D:writer.txt");
    writer.write("測(cè)試寫(xiě)入".toCharArray());
    writer.close();
}

Writer 實(shí)現(xiàn)了 Closeable 接口,可以用 try(Writer writer = new FileWriter("D:writer.txt")) {} 的方式關(guān)閉掉資源。

OutputStreamWriter

OutputStreamWriter 將輸出的字符流轉(zhuǎn)換為字節(jié)流??梢允褂弥付ǖ木幋a字符集。new OutputStreamWriter(OutputStream out, Charset cs) 。

private void outputStreamWriteDemo() throws IOException {
    // 亂碼
    try(OutputStreamWriter writer = new OutputStreamWriter(new FileOutputStream("D:writer.txt"), "gb2312")) {
        writer.write("杺");
        writer.write(66);
    }

    // 正常
    try(OutputStreamWriter writer = new OutputStreamWriter(new FileOutputStream("D:writer.txt", true), "gbk")) {
        writer.write("杺");
        writer.write(66);
    }

}

StringWriter 和 CharArrayWriter

StringWriter 內(nèi)部有一個(gè) StringBuffer 對(duì)象作為其緩沖區(qū)??梢岳闷渚彌_區(qū)中的內(nèi)容來(lái)構(gòu)造字符串。

private void stringWriteDemo() throws IOException {
    String str = "寫(xiě)入測(cè)試";
    try(StringWriter writer = new StringWriter()) {
        writer.write(str);
        writer.write(str);
        System.out.println(writer.getBuffer().toString());
    }

}

CharArrayWriter 和 StringWriter 幾乎一樣,也是在內(nèi)存中構(gòu)造一個(gè)字符串緩沖區(qū)。不過(guò)底層不是一個(gè) StringBuffer 了,是 char 的數(shù)組,默認(rèn) 32 個(gè)長(zhǎng)度。

BufferedWriter

BufferedWriter 是一個(gè)緩沖的字符輸出流,為其他 Writer 提供緩沖的功能。

private void bufferedWriteDemo() throws IOException {
    FileWriter fileWriter = new FileWriter("D:writer.txt", true);
    try(BufferedWriter writer = new BufferedWriter(fileWriter)) {
        writer.write(65);
        writer.write(66);
    }
    fileWriter.close();

}

總結(jié)

介紹了幾種常用 Writer 輸出流的使用方式。FileWriter 用于寫(xiě)入文件,BufferedWriter 自帶緩沖區(qū),StringWriter 和 CharArrayWriter 基于內(nèi)存,OutputStreamWriter 將字符流轉(zhuǎn)為字節(jié)流。

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 接口
    +關(guān)注

    關(guān)注

    33

    文章

    8254

    瀏覽量

    149945
  • JAVA
    +關(guān)注

    關(guān)注

    19

    文章

    2943

    瀏覽量

    104089
  • 參數(shù)
    +關(guān)注

    關(guān)注

    11

    文章

    1657

    瀏覽量

    31874
  • 字符
    +關(guān)注

    關(guān)注

    0

    文章

    230

    瀏覽量

    25105
  • Writer
    +關(guān)注

    關(guān)注

    0

    文章

    8

    瀏覽量

    7285
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    Java程序設(shè)計(jì):7.5.1 字符緩沖#Java

    JAVA字符
    學(xué)習(xí)硬聲知識(shí)
    發(fā)布于 :2022年11月16日 15:58:08

    Java程序設(shè)計(jì):7.5.2 字符緩沖舉例#Java

    JAVA字符
    學(xué)習(xí)硬聲知識(shí)
    發(fā)布于 :2022年11月16日 15:58:36

    Java中的輸入輸出盤(pán)點(diǎn)

    Java中的分為兩種,一種是字節(jié)流,另一種是字符,分別由四個(gè)抽象類來(lái)表示(每種包括輸入和輸出兩種所以一共四個(gè)):InputStream
    發(fā)表于 07-11 07:56

    基于數(shù)據(jù)Java字節(jié)碼分析

    本文基于數(shù)據(jù)框架理論,提出了如何將數(shù)據(jù)分析方法應(yīng)用于JAVA 字節(jié)碼中,通過(guò)建立數(shù)據(jù)與半格、數(shù)據(jù)
    發(fā)表于 12-25 13:22 ?9次下載

    java與文件實(shí)驗(yàn)

    實(shí)驗(yàn)10 與文件一、實(shí)驗(yàn)?zāi)康?1. 理解數(shù)據(jù)的概念2. 理解Java的層次結(jié)構(gòu)3. 理解文件的概念二、實(shí)驗(yàn)要求 1. 掌握字節(jié)流
    發(fā)表于 09-23 19:04 ?1875次閱讀

    實(shí)例解析Java字符串內(nèi)存管理方法

    應(yīng)用服務(wù)器運(yùn)行過(guò)程中,約40%的活躍堆空間被用來(lái)保存字符串?dāng)?shù)據(jù)[2]。 通過(guò)對(duì)Java字符串操作接口的分析可以發(fā)現(xiàn),隨著這些操作的運(yùn)行會(huì)產(chǎn)生較多的無(wú)用
    發(fā)表于 10-27 10:20 ?1次下載
    實(shí)例解析<b class='flag-5'>Java</b><b class='flag-5'>字符</b>串內(nèi)存管理方法

    Java中一種字符串的內(nèi)存管理方法

    應(yīng)用服務(wù)器運(yùn)行過(guò)程中,約40%的活躍堆空間被用來(lái)保存字符串?dāng)?shù)據(jù)[2]。 通過(guò)對(duì)Java字符串操作接口的分析可以發(fā)現(xiàn),隨著這些操作的運(yùn)行會(huì)產(chǎn)生較多的無(wú)用
    發(fā)表于 11-30 17:39 ?539次閱讀
     <b class='flag-5'>Java</b>中一種<b class='flag-5'>字符</b>串的內(nèi)存管理方法

    理解Java字符與字節(jié)流的區(qū)別

    JDK稱為Java開(kāi)發(fā)包或Java開(kāi)發(fā)工具,是一個(gè)編寫(xiě)Java的Applet小程序和應(yīng)用程序的程序開(kāi)發(fā)環(huán)境。JDK是整個(gè)Java的核心,包括了Jav
    發(fā)表于 12-04 10:39 ?1082次閱讀
    理解<b class='flag-5'>Java</b>中<b class='flag-5'>字符</b><b class='flag-5'>流</b>與字節(jié)流的區(qū)別

    Java 字節(jié)流 字符 轉(zhuǎn)換流

    Java運(yùn)行系統(tǒng)使用字節(jié)碼驗(yàn)證過(guò)程來(lái)保證裝載到網(wǎng)絡(luò)上的代碼不違背任何Java語(yǔ)言限制。這個(gè)安全機(jī)制部分包括類如何從網(wǎng)上裝載。例如,裝載的類是放在分開(kāi)的名字空間而不是局部類,預(yù)防惡意的小應(yīng)用程序用它自己的版本來(lái)代替標(biāo)準(zhǔn)Java類。
    發(fā)表于 12-04 11:15 ?1392次閱讀
    <b class='flag-5'>Java</b> 字節(jié)流 <b class='flag-5'>字符</b><b class='flag-5'>流</b> 轉(zhuǎn)換流

    基礎(chǔ):Java IO學(xué)習(xí)總結(jié)

    IO的分類 根據(jù)處理數(shù)據(jù)類型的不同分為:字符和字節(jié)流 根據(jù)數(shù)據(jù)流向不同分為:輸入流和輸出
    發(fā)表于 03-08 14:38 ?2026次閱讀

    字符和字節(jié)流有什么那區(qū)別

    字符流在Java中,根據(jù)處理的數(shù)據(jù)單位不同,分為字節(jié)流和字符。字符是由
    發(fā)表于 12-20 17:46 ?7993次閱讀
    <b class='flag-5'>字符</b><b class='flag-5'>流</b>和字節(jié)流有什么那區(qū)別

    Java反射機(jī)制清空字符串導(dǎo)致業(yè)務(wù)異常分析

    JVM為了提高性能和減少內(nèi)存開(kāi)銷,在實(shí)例化字符串常量時(shí)進(jìn)行了優(yōu)化。JVM在Java堆上開(kāi)辟了一個(gè)字符串常量池空間(StringTable),JVM通過(guò)ldc指令加載字符串常量時(shí)會(huì)調(diào)用
    的頭像 發(fā)表于 06-22 11:17 ?879次閱讀

    如何利用Java判斷一個(gè)字符串是否包含某個(gè)字符

    如何利用Java通過(guò)不同的方法來(lái)判斷一個(gè)字符串是否包含某個(gè)字符。 **2 ****方法** 1. .contains方法
    的頭像 發(fā)表于 02-17 15:13 ?1339次閱讀
    如何利用<b class='flag-5'>Java</b>判斷一個(gè)<b class='flag-5'>字符</b>串是否包含某個(gè)<b class='flag-5'>字符</b>

    Java中如何判斷字符相等

    在Python中判斷字符相等與判斷數(shù)字類型時(shí)所用的方法相同都是使用”==”來(lái)進(jìn)行判定,在Java中當(dāng)我們調(diào)用Scanner,進(jìn)行輸入字符串判定時(shí),則會(huì)無(wú)法進(jìn)行判定。
    的頭像 發(fā)表于 02-24 10:41 ?716次閱讀
    <b class='flag-5'>Java</b>中如何判斷<b class='flag-5'>字符</b>相等

    java switch case 能不能用字符

    Java的switch語(yǔ)句在處理字符串方面有一些限制。在Java 7之前,switch語(yǔ)句只能處理整數(shù)類型的表達(dá)式,如int或char。但從Java 7開(kāi)始,
    的頭像 發(fā)表于 11-30 14:46 ?1678次閱讀