java io流

結構圖

根據處理類型分

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

字符流和字節流的主要區別:

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

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

節點流類型

可以從一個特定的地點或節點讀寫數據

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

處理流類型

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

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

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

轉換流(InputStreamReader/OutputStreamWriter)

該類型是字節流與字符流之間的橋梁,可以對讀取到的字節數據進行指定編碼的編碼轉換,構造函數主要有:

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

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

數據流(DataInputStream/DataOutputStream)

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

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

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

###打印流(PrintStream/PrintWriter)
PrintStream是一個字節打印流,System.out對應的類型就是PrintStream,它的構造函數可以接受三種數據類型的值:1.字符串路徑。2.File對象 3.OutputStream
PrintStream是一個字符打印流,它的構造函數可以接受四種類型的值:1.字符串路徑。2.File對象 3.OutputStream  4.Writer  對于1、2類型的數據,可以指定編碼表,也就是字符集,對于3、4類型的數據,可以指定自動刷新,當該自動刷新為True時,只有3個方法可以用:println,printf,format。
###對象流(ObjectInputStream/ObjectOutputStream)
 該類型的流可以把類作為一個整體進行存取,主要方法有:
Object readObject();該方法拋出異常:ClassNotFountException。
void writeObject(Object):被寫入的對象必須實現一個接口:Serializable,否則就會拋出:NotSerializableException
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

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