java中io流是类吗_Java中的IO流
今天剛剛看完java的io流操作,把主要的脈絡(luò)看了一遍,不能保證以后使用時(shí)都能得心應(yīng)手,但是最起碼用到時(shí)知道有這么一個(gè)功能可以實(shí)現(xiàn),下面對(duì)學(xué)習(xí)進(jìn)行一下簡(jiǎn)單的總結(jié):
IO流主要用于硬板、內(nèi)存、鍵盤等處理設(shè)備上得數(shù)據(jù)操作,根據(jù)處理數(shù)據(jù)的數(shù)據(jù)類型的不同可以分為:字節(jié)流(抽象基類為InPutStream和OutPutStream)和字符流(抽象基類為Reader和Writer)。根據(jù)流向不同,可以分為:輸入流和輸出流。 其中主要結(jié)構(gòu)可以用下圖來(lái)表示:
字符流和字節(jié)流的主要區(qū)別:
1.字節(jié)流讀取的時(shí)候,讀到一個(gè)字節(jié)就返回一個(gè)字節(jié); ?字符流使用了字節(jié)流讀到一個(gè)或多個(gè)字節(jié)(中文對(duì)應(yīng)的字節(jié)數(shù)是兩個(gè),在UTF-8碼表中是3個(gè)字節(jié))時(shí)。先去查指定的編碼表,將查到的字符返回。
2.字節(jié)流可以處理所有類型數(shù)據(jù),如:圖片,MP3,AVI視頻文件,而字符流只能處理字符數(shù)據(jù)。只要是處理純文本數(shù)據(jù),就要優(yōu)先考慮使用字符流,除此之外都用字節(jié)流。
IO流主要可以分為節(jié)點(diǎn)流和處理流兩大類。
一、節(jié)點(diǎn)流類型
該類型可以從或者向一個(gè)特定的地點(diǎn)或者節(jié)點(diǎn)讀寫(xiě)數(shù)據(jù)。主要類型如下:
二、處理流類型
該類型是對(duì)一個(gè)已存在的流的連接和封裝,通過(guò)所封裝的流的功能調(diào)用實(shí)現(xiàn)數(shù)據(jù)讀寫(xiě),處理流的構(gòu)造方法總是要帶一個(gè)其他流對(duì)象作為參數(shù),一個(gè)流對(duì)象進(jìn)過(guò)其他流的多次包裝,叫做流的鏈接。主要可以分為以下幾種:
1、緩沖流(BufferedInPutStream/BufferedOutPutStream和BufferedWriter/BufferedReader)他可以提高對(duì)流的操作效率。
1、緩沖流(BufferedInPutStream/BufferedOutPutStream和BufferedWriter/BufferedReader)他可以提高對(duì)流的操作效率。
寫(xiě)入緩沖區(qū)對(duì)象:BufferedWriter bufw=new BufferedWriter(new FileWriter("buf.txt"));
讀取緩沖區(qū)對(duì)象:BufferedReader bufr=new BufferedReader(new FileReader("buf.txt"));
該類型的流有一個(gè)特有的方法:readLine();一次讀一行,到行標(biāo)記時(shí),將行標(biāo)記之前的字符數(shù)據(jù)作為字符串返回,當(dāng)讀到末尾時(shí),返回null,其原理還是與緩沖區(qū)關(guān)聯(lián)的流對(duì)象的read方法,只不過(guò)每一次讀取到一個(gè)字符,先不進(jìn)行具體操作,先進(jìn)行臨時(shí)儲(chǔ)存,當(dāng)讀取到回車標(biāo)記時(shí),將臨時(shí)容器中儲(chǔ)存的數(shù)據(jù)一次性返回。
2、轉(zhuǎn)換流(InputStreamReader/OutputStreamWriter)
該類型時(shí)字節(jié)流和字符流之間的橋梁,該流對(duì)象中可以對(duì)讀取到的字節(jié)數(shù)據(jù)進(jìn)行指定編碼的編碼轉(zhuǎn)換。
構(gòu)造函數(shù)主要有:InputStreamReader(InputStream); //通過(guò)構(gòu)造函數(shù)初始化,使用的是本系統(tǒng)默認(rèn)的編碼表GBK。
InputStreamWriter(InputStream,String charSet); //通過(guò)該構(gòu)造函數(shù)初始化,可以指定編碼表。
OutputStreamWriter(OutputStream); //通過(guò)該構(gòu)造函數(shù)初始化,使用的是本系統(tǒng)默認(rèn)的編碼表GBK。
OutputStreamwriter(OutputStream,String charSet); //通過(guò)該構(gòu)造函數(shù)初始化,可以指定編碼表。
注意:在使用FileReader操作文本數(shù)據(jù)時(shí),該對(duì)象使用的時(shí)默認(rèn)的編碼表,即
FileReader fr=new FileReader(“a.txt”);
與 ? InputStreamReader isr=new InputStreamReader(new FileInputStream("a.txt")); ? 的意義相同。如果要使用指定表編碼表時(shí),必須使用轉(zhuǎn)換流,即如果a.txt中的文件中的字符數(shù)據(jù)是通過(guò)utf-8的形式編碼,那么在讀取時(shí),就必須指定編碼表,那么轉(zhuǎn)換流時(shí)必須的。即:InputStreamReader isr=new InputStreamReader(new FileInputStream("a.txt"),utf-8);
3、數(shù)據(jù)流(DataInputStream/DataOutputStream)
該數(shù)據(jù)流可以方便地對(duì)一些基本類型數(shù)據(jù)進(jìn)行直接的存儲(chǔ)和讀取,不需要再進(jìn)一步進(jìn)行轉(zhuǎn)換,通常只要操作基本數(shù)據(jù)類型的數(shù)據(jù),就需要通過(guò)DataStream進(jìn)行包裝。
構(gòu)造方法:DataInputStreamReader(InputStream);
DataInputStreamWriter(OutputStream);
方法舉例:int readInt();//一次讀取四個(gè)字節(jié),并將其轉(zhuǎn)成int值
writeInt(int);//一次寫(xiě)入四個(gè)字節(jié),注意和write(int)不同,write(int)只將該整數(shù)的最低一個(gè)8位寫(xiě)入,剩余三個(gè)8為丟失
hort readShort();
writeShort(short);
String readUTF();//按照utf-8修改版讀取字符,注意,它只能讀writeUTF()寫(xiě)入的字符數(shù)據(jù)。
writeUTF(String);//按照utf-8修改版將字符數(shù)據(jù)進(jìn)行存儲(chǔ),只能通過(guò)readUTF讀取。
注意:在使用數(shù)據(jù)流讀/存數(shù)據(jù)的時(shí)候,需要有一定的順序,即某個(gè)類型的數(shù)據(jù)先寫(xiě)入就必須先讀出,服從先進(jìn)先出的原則。
四、打印流(PrintStream/PrintWriter)
PrintStream是一個(gè)字節(jié)打印流,System.out對(duì)應(yīng)的類型就是PrintStream,它的構(gòu)造函數(shù)可以接受三種數(shù)據(jù)類型的值:1.字符串路徑。2.File對(duì)象 3.OutputStream
PrintStream是一個(gè)字符打印流,它的構(gòu)造函數(shù)可以接受四種類型的值:1.字符串路徑。2.File對(duì)象 3.OutputStream? 4.Writer? 對(duì)于1、2類型的數(shù)據(jù),可以指定編碼表,也就是字符集,對(duì)于3、4類型的數(shù)據(jù),可以指定自動(dòng)刷新,當(dāng)該自動(dòng)刷新為True時(shí),只有3個(gè)方法可以用:println,printf,format。
五、對(duì)象流(ObjectInputStream/ObjectOutputStream)
該類型的流可以把類作為一個(gè)整體進(jìn)行存取,主要方法有:
Object readObject();該方法拋出異常:ClassNotFountException。
void writeObject(Object):被寫(xiě)入的對(duì)象必須實(shí)現(xiàn)一個(gè)接口:Serializable,否則就會(huì)拋出:NotSerializableException
總結(jié)
以上是生活随笔為你收集整理的java中io流是类吗_Java中的IO流的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: dubbo线程池中无可用线程
- 下一篇: java美元兑换,(Java实现) 美元