java.io 字符流

java.io 字符流

字符串基類

java.io 包中專門用于字符流處理的類,是以Reader和Writer為基礎(chǔ)派生的一系列類

字符串以字符為單位,根據(jù)碼表映射字符,一次可能讀多個(gè)字節(jié),只能處理字符類型的數(shù)據(jù)。

同類InputStream 和 OutputStream一樣,Reader 和 Writer 也是抽象類,只提供了一系列用于字符流處理的接口。他們的方法與類InputStream 和 OutputStream類似,只不過其中的參數(shù)換成字符或字符數(shù)組

Reader 是所有的輸入字符流的父類,他是一個(gè)抽象類

我們先來看一看基類 Reader 的方法,其用法與作用都與InputStream 和 OutputStream 類似,就不做過多的說明了

方法 返回值
close() void
mark(int readAheadLimit) void
markSupported() boolean
read() int
rerad(char[] cbuf,int off,int len) int
ready() boolean
reset() void
skip(long n) long

Writer 是所有的輸出字符流的父類,它是一個(gè)抽象類。Writer的方法:

方法 返回值
close() void
flush() void
write(char[] cbuf) void
write(char[] cbuf, int off,int len) void
write(int c) void
write(String str) void
write(String str, int off, int len) void

InputStreamReader 和 OutputStreamWriter 是 java.io 包中用于處理字符流的最基本的類,用來在字節(jié)流和字符流之間作為中介:從字節(jié)輸入流讀入字節(jié),并按編碼規(guī)范轉(zhuǎn)換為字符;往字節(jié)輸出流寫字符時(shí)先將字符按編碼規(guī)范轉(zhuǎn)換為字節(jié)。使用這兩者進(jìn)行字符處理時(shí),在構(gòu)造方法中應(yīng)指定一定的平臺規(guī)范,以便把以字節(jié)方式表示的流轉(zhuǎn)換為特定平臺上的字符表示。

InputStreamReader(InputStream in); //缺省規(guī)范說明

//指定規(guī)范 enc
InputStreamReader(InputStream in, String enc);

OutputStreamWriter(OutputStream out); //缺省規(guī)范說明

//指定規(guī)范 enc
OutputStreamWriter(OutputStream out, String enc);

如果讀取的字符流不是來自本地時(shí)(比如網(wǎng)上某處與本地編碼方式不同的機(jī)器),那么在構(gòu)造字符輸入流時(shí)就不能簡單地使用缺省編碼規(guī)范,而應(yīng)該指定一種統(tǒng)一的編碼規(guī)范“ISO 8859_1”,這是一種映射到 ASCCII 碼的編碼方式,能夠在不同平臺之間正確轉(zhuǎn)換字符。

InputStreamReader ir = new InputStreamReader(is,"8859_1");

緩存流

同樣的,為了提高字符流處理的效率,java.io 中也提供了換存流

BufferedReader 和 BufferedWriter 其構(gòu)造方法與 BufferedInputStream 和 BufferedOutPutStream 相類似. 另外,除了read() 和 write() 方法外,它還提供了整行字符處理方法:

  1. public String readLine() : BufferedReader 的方法,從輸入流中讀取一行字符,行結(jié)束標(biāo)志 \n 、\r 或者兩者在一起(這是根據(jù)系統(tǒng)而定的)
  2. public void newLine() : BufferedWriter 的方法,向輸出流中寫入一個(gè)行結(jié)束標(biāo)志,它不是簡單地?fù)Q行符 \n\r , 而是系統(tǒng)定義的行隔離標(biāo)志(line separator)

看一看例子:

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;

public class FileToUnicode {
    public static void main(String args[]) {
        try {
            FileInputStream fis = new FileInputStream("file1.txt");
            InputStreamReader dis = new InputStreamReader(fis);
            BufferedReader reader = new BufferedReader(dis);
            String s;
            //每次讀取一行,當(dāng)改行為空時(shí)結(jié)束
            while((s = reader.readLine()) != null){
                System.out.println("read:" + s);
            }
            dis.close();
        }
        catch(IOException e) {
            System.out.println(e);
        }
    }
}

如file1.txt 的內(nèi)容如下:

abc
efg
hij

其他字符流類

在這里我們就列舉一下有哪些類,具體的就不仔細(xì)列舉了。

  1. 對字符數(shù)組進(jìn)行處理: CharArrayReader、CharArrayWrite
  2. 對文本文件進(jìn)行處理:FileReader、FileWriter
  3. 對字符串進(jìn)行處理:StringReader、StringWriter
  4. 過濾字符流:FilterReader、FileterWriter
  5. 管道字符流:PipedReader、PipedWriter
  6. 行處理字符流:LineNumberReader
  7. 打印字符流:PrintWriter

類有千萬,方法更是不計(jì)其數(shù),所以沒有必要去掌握所有的方法和類,只需要知道常見常用的就行了,而大多數(shù)的類和方法,希望大家有一個(gè)印象,當(dāng)我們在實(shí)際開放的時(shí)間,能夠想到,并且借助其他工具去查詢我們需要的方法的應(yīng)用方式就可以了。

總結(jié)

本節(jié)課程主要學(xué)習(xí)了Java字符流的相關(guān)基礎(chǔ)的相關(guān)基礎(chǔ)知識和用法,下一節(jié)我們將進(jìn)入文件操作/隨機(jī)訪問文件的學(xué)習(xí)。

參考鏈接

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

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

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