Java精選筆記_IO流(轉換流、常用流、流操作規律、字符編碼)


IO流

用來處理設備之間的數據傳輸,java對數據的操作是通過流的方式,java用於操作流的對象都在IO包中

按操作數據分為:字節流和字符流;按流向分為:輸入流和輸出流

程序從輸入流中讀取數據,向輸出流中寫入數據

字節流的抽象基類:Inputstream  和 OutputStream;字符流的抽象基類:Reader 和 Writer

其他流均是繼承這4個抽象類而來的。

轉換流

轉換流也是一種包裝流,其中OutputStreamWriter是Writer的子類,可以將一個字節流輸出流包裝成字符輸出流,方便直接寫入字符,而InputStreamReader是Reader的子類,它可以將一個字節輸入流包裝成字符輸入流,方便直接讀取字符。


InputStreamReader讀取轉換流--------字節流通向字符流的橋梁

步驟 :

    1.獲取鍵盤錄入對象

    Inputstream in=System.in

    2.將字節流對象轉換成字符流對象,使用轉換流InputStreamReader 

    InputStreamReader isr=new InputStreamReader(in);

    3.提高效率使用字符流緩沖區 BufferedReader進行讀取

    BufferedReader bf=new BufferedReader(isr);

    String line=null;
    while((line=bf.readLine())!=null) {
        if("over".equals(line))
        break;
        sop(line);
    }
    bufr.close;


OutputStreamReader寫入轉換流----------字符流通向字節流的橋梁
步驟 :

    1.獲取輸出對象

    Outputstream out=System.out

    2.將字符流對象轉換成字節流對象,使用轉換流OutputstreamWriter 

    OutputstreamWriter osw=new OutputstreamWriter(out);

    3.提高效率使用字符流緩沖區 BufferedWriter進行寫入

    BufferedWriter bw=new BufferedWriter(osw);

    String line=null;
    while((line=bf.readLine())!=null) {
       if("over".equals(line))
        break;
        bw.write(line);
        bufw.newLine();
    }
    bufr.close;


常用流

字節流
    InputStream
    int read()
    int read(byte[])
    int read(byte[], int, int)
        FileInputStream
        AudioInputStream
        ByteArrayInputStream
        ObjectInputStream
        PipedInputStream
    int available()
    void close()
    OutputStream
    write(int)
    write(byte[])
    write(byte[], int, int)
        FileOutputStream
        ByteArrayOutputStream
        ObjectOutputStream
        PipedOutputStream
    flush()
    close()
字符流
    Reader
    FileReader節點流
    BufferedReader過濾流(處理流)
    InputStreamReader轉換流
    Writer
    FileWriter節點流
    BufferedWriter過濾流(處理流)
    OutputStreamWriter轉換流


讀取鍵盤錄入
System.out:對應的是標准輸出設備,控制台
System.in:對應的標准輸入設備,鍵盤
    InputStream in=System.in;
    int by=in.read();
    sop(by);
    in.close();  //結束錄入 

流操作規律

基本規律

1.明確源和目的

    源:輸入流。InputStream字節流  Reader 字符流

    目的:輸出流 OutPutStream 字節流  Writer 字符流

2.操作的數據是否是純文本

    是就是字符流,如果設備是鍵盤 就將字節流轉換為字符流

    不是就是字節流

3.當體系明確后,在明確要是用那個具體的對象

    通過設備來區分:

    源設備  內存 硬盤 鍵盤

    目的設備  內存  硬盤  控制台

4.是否需要提高效率 

    是 BufferedReader  BufferedInputStream

    否 BuffreredWriter BufferedOutputStream

案例分析

1.將一個文本文件中的數據存儲到另一個文件中,復制文件

源:InputStream字節流  Reader 字符流
       是否是純文本 是  Reader
       設備: 文件   操作文件的對象 就是FileReader
       是否需要高效 
       是  BufferedReader
       FileReader fr=new FileReader("a.txt");
       BufferedReader bufr=new BufferedReader(fr);
 
目的:OutPutStream 字節流  Writer 字符流
          是否是純文本 :是 Writer 
          設備: 文件 寫入文件的對象 就是 FileWriter 
          是否需要高效  是   BufferedWriter
          FileWriter fw=new FileWriter("b.txt");
          BufferedWriter bufw=new BufferedWriter(fw);


2.將一個圖片文件數據存儲到另一個文件中,復制文件。
源:是否是純文本 : 不是  InputStream
     設備 文件 就是 FileInputStream
     是否高效 是
     BufferedInputStream
     FileInputStream isr=new FileInputStream("a.jpg");
     BufferedInputStream bufis=new BufferedInputStream(isr);
目的:是否純文本 :不是 OutPutStream
     設備:文件 FileOutPutStream
     是否高效 是
     BufferedOutputStream
     FileOutPutStream osw=new FileOutPutStream("b.jpg");
     BufferedOutputStream bufos=new BufferedOutputStream(osw);


3.需求將鍵盤錄入的數據保存到一個文件中 。

    源:鍵盤  字節流 

    是否純文本  Reader

    設備 :鍵盤  ,對應的對象時 System.in 對應的是字節流 ,為了操作方便 轉成字符流

    既然明確了Reader 就將System.in 轉換成字符流 InputStreamReader

    InputStreamReader isr=new InputStreamReader(System.in);

    需要高效嗎 ?

    BufferedReader bufr=new BufferedReader(isr);

目的: 文件

    是否純文本 是  Writer
    設備:文件 FileWriter

    需要高效嗎?

    是 BufferedWriter


4.擴展 :想要把錄入的數據按照指定的編碼表(utf-8)將數據存到文件中

目的:OutPutStream 字節流  Writer 字符流

     是否是存文本:是  Writer

     設備 :文件 fileWriter

     默認編碼表是 gbk

     編碼標只有轉換流可以指定。所以要使用的對象是寫入轉換流 OutputStreamWriter

     轉換流需要接受一個自己輸出流,操作字節輸出流的是FileOutputStream

     OutputStreamWriter osw=new OutputStreamWriter(new FileOutputStream("b.txt"),"utf-8");

     BufferedWriter bufw=new BufferedWriter (osw);



通常涉及到字符編碼轉換的時候,就需要用到轉換流。

字符編碼

字符碼表

字符碼表是一種可以方便計算機識別的特定字符集,它是將每一個字符和一個唯一的數字對應而形成的一張表。ASCII、ISO8859-1、GB2312、GBK、Unicode、UTF-8

字符編碼和解碼

把字符串轉換成計算機識別的字節序列稱為編碼

把字節序列轉換為普通人能看懂的明文字符串稱為解碼

字符傳輸

通過構造方法InputStreamReader(InputStream in,String charsetName)和OutputStreamReader(OutputStream in,String charsetName)創建流對象時,可以對需要讀寫的數據指定編碼格式



兩種設計模式

適配器模式

將字節流適配成可以用字符的方式操作的字符流

適配:把不兼容的(接口)變成兼容的(接口)

InputStreamReader
OutuptStreamWriter

裝潢模式

處理流(過濾流)基本上都是用了裝潢模式

BufferedReader / BufferedWriter
PrintStream / PrintWriter
DataInputStream / DataOutputStream


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM