文件操作(7)高級(jí)流之轉(zhuǎn)換流java.io.InputStreamReader和OutputStreamWriter

  • 它們是字符流非常常用的一對(duì)實(shí)現(xiàn)類(lèi)同時(shí)也是一對(duì)高級(jí)流,實(shí)際開(kāi)發(fā)中我們不直接操作它們,但是它們?cè)诹鬟B接中是非常重要的一環(huán).

  • 作用:

1:銜接字節(jié)流與其他字符流
2:將字符與字節(jié)相互轉(zhuǎn)換

  • 示例1 轉(zhuǎn)換輸出流向文件中寫(xiě)入文本數(shù)據(jù)
import java.io.*;
import java.nio.charset.StandardCharsets;

public class OSWDemo {
    public static void main(String[] args) throws IOException {
        /*
            使用這一對(duì)流演示轉(zhuǎn)換流的讀寫(xiě)字符方法

            java.io.Writer所有字符輸出流的超類(lèi)上,定義了寫(xiě)出字符的相關(guān)方法
            void write(int d)寫(xiě)出一個(gè)字符,實(shí)際傳入的應(yīng)當(dāng)是一個(gè)char。
            void write(char[] data)
            void write(char[] data,int offset,int len)
            void write(String str) 直接寫(xiě)出一個(gè)字符串
         */
        FileOutputStream fos = new FileOutputStream("osw.txt");
        OutputStreamWriter osw = new OutputStreamWriter(fos,StandardCharsets.UTF_8);

        String line = "如果你突然打了個(gè)噴嚏,那一定就是我在想你。";
        osw.write(line);//轉(zhuǎn)換流的write(String str)會(huì)將寫(xiě)出的字符串轉(zhuǎn)換為字節(jié)然后寫(xiě)出
        osw.write("如果半夜被手機(jī)吵醒,那一定就是我關(guān)心。");
        System.out.println("寫(xiě)出完畢!");
        osw.close();
    }
}
  • 示例2 轉(zhuǎn)換輸入流讀取文本文件
import java.io.*;
/**
 * 轉(zhuǎn)換字符輸入流
 * 可以將讀取的字節(jié)按照指定的字符集轉(zhuǎn)換為字符
 */
public class ISRDemo {
    public static void main(String[] args) throws IOException {
        //將osw.txt文件中的所有文字讀取回來(lái).
        FileInputStream fis = new FileInputStream("osw.txt");
        InputStreamReader isr = new InputStreamReader(fis,"UTF-8");
        /*
            字符流讀一個(gè)字符的read方法定義:
            int read()
            讀取一個(gè)字符,返回的int值實(shí)際上表示的是一個(gè)char(低16位有效).如果返回的
            int值表示的是-1則說(shuō)明EOF
         */
        //測(cè)試讀取文件中第一個(gè)字
//        int d = isr.read();
//        char c = (char)d;
//        System.out.println(c);

        //循環(huán)將文件所有字符讀取回來(lái)
        int d;
        while((d = isr.read()) != -1){
            System.out.print((char)d);
        }

        isr.close();
    }
}
  • 轉(zhuǎn)換流的意義

實(shí)際開(kāi)發(fā)中我們還有功能更好用的字符高級(jí)流.但是其他的字符高級(jí)流都有一個(gè)共通點(diǎn):不能直接連接在字節(jié)流上.而實(shí)際操作設(shè)備的流都是低級(jí)流同時(shí)也都是字節(jié)流.因此不能直接在流連接中串聯(lián)起來(lái).轉(zhuǎn)換流是一對(duì)可以連接在字節(jié)流上的字符流,其他的高級(jí)字符流可以連接在轉(zhuǎn)換流上.在流連接中起到"轉(zhuǎn)換器"的作用(負(fù)責(zé)字符與字節(jié)的實(shí)際轉(zhuǎn)換)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容