java io流

結(jié)構(gòu)圖

根據(jù)處理類型分

根據(jù)處理數(shù)據(jù)的數(shù)據(jù)類型的不同可以分為:字節(jié)流(抽象基類為InPutStream和OutPutStream)和字符流(抽象基類為Reader和Writer)。根據(jù)流向不同,可以分為:輸入流和輸出流。

字符流和字節(jié)流的主要區(qū)別:

  • 1.字節(jié)流讀取的時候,讀到一個字節(jié)就返回一個字節(jié); 字符流使用了字節(jié)流讀到一個或多個字節(jié)(中文對應的字節(jié)數(shù)是兩個,在UTF-8碼表中是3個字節(jié))時。先去查指定的編碼表,將查到的字符返回。
  • 2.字節(jié)流可以處理所有類型數(shù)據(jù),如:圖片,MP3,AVI視頻文件,而字符流只能處理字符數(shù)據(jù)。只要是處理純文本數(shù)據(jù),就要優(yōu)先考慮使用字符流,除此之外都用字節(jié)流。

IO流主要可以分為節(jié)點流和處理流兩大類

節(jié)點流類型

可以從一個特定的地點或節(jié)點讀寫數(shù)據(jù)

類型 字符流 字節(jié)流
File(文件) FileReader FileWriter FileInputStream FileOutputSream
Memory Array CharArrayReader CharArrayWriter ByteArrayInputStream ByteArrayOutputSream
Memory String StringReader StringWriter -
Pipe(管道) PipedReader PipedWriter PipedInputSream PipedOutputSream

處理流類型

該類型是對一個已存在的流的連接和封裝,通過所封裝的流的功能調(diào)用實現(xiàn)數(shù)據(jù)讀寫,處理流的構(gòu)造方法總是要帶一個其他流對象作為參數(shù),一個流對象進過其他流的多次包裝,叫做流的鏈接。主要可以分為以下幾種:

緩沖流(BufferedInPutStream/BufferedOutPutStream和BufferedWriter/BufferedReader)他可以提高對流的操作效率
  • 寫入緩沖區(qū)對象
    BufferedWriter bufw=new BufferedWriter(new FileWriter("buf.txt"));
  • 讀取緩沖區(qū)對象:
    BufferedReader bufr=new BufferedReader(new FileReader("buf.txt"));

該類型流有readLine()方法一次讀取一行,直到末尾返回null

轉(zhuǎn)換流(InputStreamReader/OutputStreamWriter)

該類型是字節(jié)流與字符流之間的橋梁,可以對讀取到的字節(jié)數(shù)據(jù)進行指定編碼的編碼轉(zhuǎn)換,構(gòu)造函數(shù)主要有:

 InputStreamReader(InputStream);        //通過構(gòu)造函數(shù)初始化,使用的是本系統(tǒng)默認的編碼表GBK。  
 InputStreamWriter(InputStream,String charSet);   //通過該構(gòu)造函數(shù)初始化,可以指定編碼表。  
 OutputStreamWriter(OutputStream);      //通過該構(gòu)造函數(shù)初始化,使用的是本系統(tǒng)默認的編碼表GBK。  
 OutputStreamwriter(OutputStream,String charSet);   //通過該構(gòu)造函數(shù)初始化,可以指定編碼表。 

(字節(jié)流轉(zhuǎn)字符流)FileReader fr=new FileReader(“a.txt”); 與 InputStreamReader isr=new InputStreamReader(new FileInputStream("a.txt")); 的意義相同,指定編碼如InputStreamReader isr=new InputStreamReader(new FileInputStream("a.txt"),utf-8);

數(shù)據(jù)流(DataInputStream/DataOutputStream)

數(shù)據(jù)流可以方便地對一些基本類型數(shù)據(jù)進行直接的存儲和讀取,不需要再進一步進行轉(zhuǎn)換,通常只要操作基本數(shù)據(jù)類型的數(shù)據(jù),就需要通過DataStream進行包裝。構(gòu)造方法:

DataInputStreamReader(InputStream);  
 DataInputStreamWriter(OutputStream);```
方法舉例

int readInt();//一次讀取四個字節(jié),并將其轉(zhuǎn)成int值
writeInt(int);//一次寫入四個字節(jié),注意和write(int)不同,write(int)只將該整數(shù)的最低一個8位寫入,剩余三個8為丟失
hort readShort();
writeShort(short);
String readUTF();//按照utf-8修改版讀取字符,注意,它只能讀writeUTF()寫入的字符數(shù)據(jù)。
writeUTF(String);//按照utf-8修改版將字符數(shù)據(jù)進行存儲,只能通過readUTF讀取。

###打印流(PrintStream/PrintWriter)
PrintStream是一個字節(jié)打印流,System.out對應的類型就是PrintStream,它的構(gòu)造函數(shù)可以接受三種數(shù)據(jù)類型的值:1.字符串路徑。2.File對象 3.OutputStream
PrintStream是一個字符打印流,它的構(gòu)造函數(shù)可以接受四種類型的值:1.字符串路徑。2.File對象 3.OutputStream  4.Writer  對于1、2類型的數(shù)據(jù),可以指定編碼表,也就是字符集,對于3、4類型的數(shù)據(jù),可以指定自動刷新,當該自動刷新為True時,只有3個方法可以用:println,printf,format。
###對象流(ObjectInputStream/ObjectOutputStream)
 該類型的流可以把類作為一個整體進行存取,主要方法有:
Object readObject();該方法拋出異常:ClassNotFountException。
void writeObject(Object):被寫入的對象必須實現(xiàn)一個接口:Serializable,否則就會拋出:NotSerializableException
最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

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

  • 一、IO流整體結(jié)構(gòu)圖 流是一組有順序的,有起點和終點的字節(jié)集合,是對數(shù)據(jù)傳輸?shù)目偡Q或抽象。即數(shù)據(jù)在兩設備間的傳輸稱...
    慕凌峰閱讀 1,525評論 0 12
  • 標準輸入輸出,文件的操作,網(wǎng)絡上的數(shù)據(jù)流,字符串流,對象流,zip文件流等等,java中將輸入輸出抽象稱為流,就好...
    navy_legend閱讀 798評論 0 0
  • 摘要 Java I/O是Java技術體系中非?;A的部分,它是學習Java NIO的基礎。而深入理解Java NI...
    biakia閱讀 7,778評論 7 81
  • ①IO流(字符流FileReader) 1.字符流是什么字符流是可以直接讀寫字符的IO流字符流讀取字符, 就要先讀...
    Y小圓臉閱讀 563評論 0 2
  • IO流 看著字少,內(nèi)容著實不少,這里開始就給諸君推薦一篇大神的博客,總結(jié)的思路清晰,鬼斧神工,哈哈,總之總結(jié)的很好...
    向日花開閱讀 876評論 0 8

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