輸入流和輸出流:往程式中讀入的流就是輸入流(InputStream和Reader的子類),從程式寫出到其他媒體的流就是輸出流(OutputStream和Writer的子類)。
節點流和處理流:節點流為直接操作外部媒體的類如FileOutputStream,FileInputStream,FileWriter,FileReader等。處理流為套接在節點流上的流如緩沖流BufferedInputStream,BufferReader,資料流DateInputStream,DateOutputStream,轉換流InputStreamReader。
位元組流和字元流:以stream結尾的都為位元組流。
範圍:ascll:0-126 unicode:0-65535
原來很多國家和地區都有自己的編碼:gbk,gb2312等,不統一。Unicode則統一了全世界文字的編碼,一個字元占兩個位元組。
java中用的是unicode,一個字元占兩個位元組,16位.
char(字元)類型使用國際通用的16位Unicode字元集,是以能自動表達大多數國家的字元。
String 字串裡的每個字元都是16位,或者說2個位元組、長整數,以便提供對Unicode字元的支援。
Java所提供的所有流類型位于包java.io内,且都分别繼承自以下四種抽象流類型。
簡單了解這四個抽象類就是:寫出,讀入(寫出,讀入都是以程式為參考物的)
差別:InputStream的int read()方法的傳回值範圍為0-255(位元組)
Reader的int read()方法的傳回值範圍為0-65535(字元)
OutputStream和Writer的write()方法的差別看API,寫得很詳細。
下面分别介紹這四個抽象類:
InputStream:繼承自InputStream的流都是用于向程式中輸入資料,且資料的機關為位元組(8bit)[這些類中的read()方法擷取的都是unicode碼(兩位元組,16位),是以對于ascll碼中的字元可以正确讀取,因為他們的unicode碼和ascll 碼是一樣的(unicode碼前一個位元組為0,後一個位元組則為相應的ascll碼)。但是不能讀取漢字,因為漢字的unicode碼大于256,占兩個位元組].
OutputStream:繼承自OutputStream的流都是用于向程式中輸出資料,且資料的機關為位元組(8bit)
Reader:繼承自Reader的流都是用于向程式中輸入資料,且資料的機關為字元(16bit)
Writer:繼承自Writer的流都是用于程式中輸出資料,且資料的機關為字元(16bit)
以上為對IO的總體概述,後續會寫出一些類的例子。
本文轉自 yzzh9 51CTO部落格,原文連結:http://blog.51cto.com/java999/159843,如需轉載請自行聯系原作者