亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Java > 正文

java IO流

2019-11-11 00:17:57
字體:
來源:轉載
供稿:網友
java中的流,可以從不同的角度進行分類。

    按流的方向分:輸入流和輸出流。

   按處理數據單位分:字節流和字符流。

   按實現功能分:節點流和處理流。

      輸出流:

 

      輸入流:

   字節流:一次讀入或讀出是8位二進制。

   字符流:一次讀入或讀出是16位二進制。

   字節流和字符流的原理是相同的,只不過處理的單位不同而已。后綴是Stream是字節流,而后綴是Reader,Writer是字符流。

   字節流:處理字節數據的流對象。設備上的數據無論是圖片或者dvd,文字,它們都以二進制存儲的。二進制的最終都是以一個8位為數據單元進行體現,所以計算機中的最小數據單元就是字節。意味著,字節流可以處理設備上的所有數據,所以字節流一樣可以處理字符數據。

 

   節點流:直接與數據源相連,讀入或讀出。

   直接使用節點流,讀寫不方便,為了更快的讀寫文件,才有了處理流。

   處理流:與節點流一塊使用,在節點流的基礎上,再套接一層,套接在節點流上的就是處理流。

   下面是JavaIO流的結構示意圖:

字符流:

   Reader:用于讀取字符流的抽象類。

       |---BufferedReader:從字符輸入流中讀取文本,緩沖各個字符,從而實現字符、數組和行的高效讀取。 可以指定緩沖區的大小,或者可使用默認的大小。大 多數情況下,默認值就足夠大了。

             |---LineNumberReader:跟蹤行號的緩沖字符輸入流。此類定義了方法setLineNumber(int)和getLineNumbner(),它們可分別用于設置和獲取當前行號。

        |---InputStreamReader:是字節流通向字符流的橋梁:它使用指定的 charset 讀取字節并將其解碼為字符。它使用的字符集可以由名稱指定或顯式給定,或者可以接受平臺默認的字符集。

             |---FileReader:用來讀取字符文件的便捷類。此類的構造方法假定默認字符編碼和默認字節緩沖區大小都是適當的。要自己指定這些值,可以先在 FileInputStream 上構造一個 InputStreamReader。

***************************************************************************

   Writer:寫入字符流的抽象類。

        |---BufferedWriter:將文本寫入字符輸出流,緩沖各個字符,從而提供單個字符、數組和字符串的高效寫入。

        |---OutputStreamWriter:是字符流通向字節流的橋梁:可使用指定的 charset 將要寫入流中的字符編碼成字節。它使用的字符集可以由名稱指定或顯式給定,否則將接受平臺默認的字符集。

             |---FileWriter:用來寫入字符文件的便捷類。此類的構造方法假定默認字符編碼和默認字節緩沖區大小都是可接受的。要自己指定這些值,可以先在 FileOutputStream 上構造一個 OutputStreamWriter。

****************************************************************************

   字節流:

   InputStream:是表示字節輸入流的所有類的超類。

        |--- FileInputStream:從文件系統中的某個文件中獲得輸入字節。哪些文件可用取決于主機環境。FileInputStream 用于讀取諸如圖像數據之類的原始字節流。要讀取字符流,請考慮使用 FileReader。

        |--- FilterInputStream:包含其他一些輸入流,它將這些流用作其基本數據源,它可以直接傳輸數據或提供一些額外的功能。

             |--- BufferedInputStream:該類實現緩沖的輸入流。

**************************************************************************

   OutputStream:此抽象類是表示輸出字節流的所有類的超類。

        |--- FileOutputStream:文件輸出流是用于將數據寫入 File 或 FileDescriptor 的輸出流。

        |--- FilterOutputStream:此類是過濾輸出流的所有類的超類。

              |--- BufferedOutputStream:該類實現緩沖的輸出流。

   流的操作規律:

   1、明確源和目的。

   數據源:就是需要讀取,可以使用兩個體系:InputStream、Reader;

   數據匯:就是需要寫入,可以使用兩個體系:OutputStream、Writer;

   2、操作的數據是否是純文本數據?

   如果是:數據源:Reader

           數據匯:Writer 

   如果不是:數據源:InputStream

             數據匯:OutputStream

   3、雖然確定了一個體系,但是該體系中有太多的對象,到底用哪個呢?

   明確操作的數據設備。

   數據源對應的設備:硬盤(File),內存(數組),鍵盤(System.in)

   數據匯對應的設備:硬盤(File),內存(數組),控制臺(System.out)。

   4、需要在基本操作上附加其他功能嗎?比如緩沖。

   如果需要就進行裝飾。

/記住,只要一讀取鍵盤錄入,就用這句話。

BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));

BufferedWriter bufw = new BufferedWriter(new OutputStreamWriter(System.out));

Java IO流對象

1.輸入字節流InputStreamIO 中輸入字節流的繼承圖可見上圖,可以看出:

InputStream 是所有的輸入字節流的父類,它是一個抽象類。ByteArrayInputStream、StringBufferInputStream、FileInputStream 是三種基本的介質流,它們分別從Byte 數組、StringBuffer、和本地文件中讀取數據。PipedInputStream 是從與其它線程共用的管道中讀取數據,與Piped 相關的知識后續單獨介紹。ObjectInputStream 和所有FilterInputStream 的子類都是裝飾流(裝飾器模式的主角)。

 

2.輸出字節流OutputStream

IO 中輸出字節流的繼承圖可見上圖,可以看出:

OutputStream 是所有的輸出字節流的父類,它是一個抽象類。ByteArrayOutputStream、FileOutputStream 是兩種基本的介質流,它們分別向Byte 數組、和本地文件中寫入數據。PipedOutputStream 是向與其它線程共用的管道中寫入數據,ObjectOutputStream 和所有FilterOutputStream 的子類都是裝飾流。

 

3.字節流的輸入與輸出的對應

 

圖中藍色的為主要的對應部分,紅色的部分就是不對應部分。紫色的虛線部分代表這些流一般要搭配使用。從上面的圖中可以看出Java IO 中的字節流是極其對稱的?!按嬖诩昂侠怼蔽覀兛纯催@些字節流中不太對稱的幾個類吧!

LineNumberInputStream 主要完成從流中讀取數據時,會得到相應的行號,至于什么時候分行、在哪里分行是由改類主動確定的,并不是在原始中有這樣一個行號。在輸出部分沒有對應的部分,我們完全可以自己建立一個LineNumberOutputStream,在最初寫入時會有一個基準的行號,以后每次遇到換行時會在下一行添加一個行號,看起來也是可以的。好像更不入流了。PushbackInputStream 的功能是查看最后一個字節,不滿意就放入緩沖區。主要用在編譯器的語法、詞法分析部分。輸出部分的BufferedOutputStream 幾乎實現相近的功能。StringBufferInputStream 已經被DePRecated,本身就不應該出現在InputStream 部分,主要因為String 應該屬于字符流的范圍。已經被廢棄了,當然輸出部分也沒有必要需要它了!還允許它存在只是為了保持版本的向下兼容而已。SequenceInputStream 可以認為是一個工具類,將兩個或者多個輸入流當成一個輸入流依次讀取。完全可以從IO 包中去除,還完全不影響IO 包的結構,卻讓其更“純潔”――純潔的Decorator 模式。PrintStream 也可以認為是一個輔助工具。主要可以向其他輸出流,或者FileInputStream 寫入數據,本身內部實現還是帶緩沖的。本質上是對其它流的綜合運用的一個工具而已。一樣可以踢出IO 包!System.out 和System.out 就是PrintStream 的實例!

 

4.字符輸入流Reader

在上面的繼承關系圖中可以看出:

Reader 是所有的輸入字符流的父類,它是一個抽象類。CharReader、StringReader 是兩種基本的介質流,它們分別將Char 數組、String中讀取數據。PipedReader 是從與其它線程共用的管道中讀取數據。BufferedReader 很明顯就是一個裝飾器,它和其子類負責裝飾其它Reader 對象。FilterReader 是所有自定義具體裝飾流的父類,其子類PushbackReader 對Reader 對象進行裝飾,會增加一個行號。InputStreamReader 是一個連接字節流和字符流的橋梁,它將字節流轉變為字符流。FileReader 可以說是一個達到此功能、常用的工具類,在其源代碼中明顯使用了將FileInputStream 轉變為Reader 的方法。我們可以從這個類中得到一定的技巧。Reader 中各個類的用途和使用方法基本和InputStream 中的類使用一致。后面會有Reader 與InputStream 的對應關系。

 

5.字符輸出流Writer

在上面的關系圖中可以看出:

Writer 是所有的輸出字符流的父類,它是一個抽象類。CharArrayWriter、StringWriter 是兩種基本的介質流,它們分別向Char 數組、String 中寫入數據。PipedWriter 是向與其它線程共用的管道中寫入數據,BufferedWriter 是一個裝飾器為Writer 提供緩沖功能。PrintWriter 和PrintStream 極其類似,功能和使用也非常相似。OutputStreamWriter 是OutputStream 到Writer 轉換的橋梁,它的子類FileWriter 其實就是一個實現此功能的具體類(具體可以研究一SourceCode)。功能和使用和OutputStream 極其類似,后面會有它們的對應圖。

 

6.字符流的輸入與輸出的對應

 

7.字符流與字節流轉換

轉換流的特點:

其是字符流和字節流之間的橋梁可對讀取到的字節數據經過指定編碼轉換成字符可對讀取到的字符數據經過指定編碼轉換成字節

何時使用轉換流?

當字節和字符之間有轉換動作時;流操作的數據需要編碼或解碼時。

具體的對象體現:

InputStreamReader:字節到字符的橋梁OutputStreamWriter:字符到字節的橋梁

這兩個流對象是字符體系中的成員,它們有轉換作用,本身又是字符流,所以在構造的時候需要傳入字節流對象進來。

 

8.File類

File類是對文件系統中文件以及文件夾進行封裝的對象,可以通過對象的思想來操作文件和文件夾。 File類保存文件或目錄的各種元數據信息,包括文件名、文件長度、最后修改時間、是否可讀、獲取當前文件的路徑名,判斷指定文件是否存在、獲得當前目錄中的文件列表,創建、刪除文件和目錄等方法。  

9.RandomaccessFile類

該對象并不是流體系中的一員,其封裝了字節流,同時還封裝了一個緩沖區(字符數組),通過內部的指針來操作字符數組中的數據。 該對象特點:

該對象只能操作文件,所以構造函數接收兩種類型的參數:a.字符串文件路徑;b.File對象。該對象既可以對文件進行讀操作,也能進行寫操作,在進行對象實例化時可指定操作模式(r,rw)

注意:該對象在實例化時,如果要操作的文件不存在,會自動創建;如果文件存在,寫數據未指定位置,會從頭開始寫,即覆蓋原有的內容。 可以用于多線程下載或多個線程同時寫數據到文件

10、打印流(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。 11、對象流(ObjectInputStream/ObjectOutputStream)        該類型的流可以把類作為一個整體進行存取,主要方法有:        Object readObject();該方法拋出異常:ClassNotFountException。        void writeObject(Object):被寫入的對象必須實現一個接口:Serializable,否則就會拋出:NotSerializableException


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲精品av在线播放| 26uuu亚洲伊人春色| 2025国产精品视频| 最近2019中文字幕一页二页| 欧美精品在线观看91| 日韩欧美在线视频| 最近免费中文字幕视频2019| 亚洲精品白浆高清久久久久久| 久久成人国产精品| 国产精品免费看久久久香蕉| 91欧美精品成人综合在线观看| 欧美老女人在线视频| 国产精品视频男人的天堂| 欧美日韩一区免费| 亚洲高清色综合| 中文字幕欧美日韩| 国产精品成人v| 全色精品综合影院| 国内外成人免费激情在线视频| 国产精品视频自拍| 91麻豆国产语对白在线观看| 欧美国产日韩视频| 国产精品都在这里| 欧美xxxx做受欧美.88| 亚洲毛片在线观看| 亚州精品天堂中文字幕| 久热精品视频在线| 不卡av在线网站| 操91在线视频| 久久精品成人欧美大片古装| 久久久国产视频91| 亚洲色无码播放| 国产成人精品一区二区| 美女久久久久久久| 欧美日韩亚洲一区二区三区| 国产一区香蕉久久| 91色视频在线观看| 亚洲成人激情在线| 亚洲在线免费视频| 91亚洲午夜在线| 欧美日韩成人免费| 色综合久久精品亚洲国产| 亚洲男女自偷自拍图片另类| 中文字幕无线精品亚洲乱码一区| 亚洲国产高清高潮精品美女| 欧美午夜激情视频| 搡老女人一区二区三区视频tv| 欧美亚洲国产日韩2020| 亚洲男人天堂古典| 亚洲影院污污.| www.日本久久久久com.| 成人字幕网zmw| 国产香蕉97碰碰久久人人| 免费av在线一区| 欧美视频在线观看免费| 国产精品视频区| 992tv成人免费影院| 欧美日韩黄色大片| 亚洲午夜久久久影院| 国产精品成人观看视频国产奇米| 麻豆国产精品va在线观看不卡| 欧美国产在线视频| 亚洲第一区在线观看| 日韩精品免费在线观看| 亚洲视频日韩精品| 亚洲一区二区三区成人在线视频精品| 蜜月aⅴ免费一区二区三区| 好吊成人免视频| 日韩av综合中文字幕| 欧美日韩国产91| 国产午夜精品美女视频明星a级| 精品女同一区二区三区在线播放| 精品久久中文字幕久久av| 日韩在线小视频| 亚洲精品国产精品国产自| 中文字幕亚洲国产| 亚洲精品www久久久久久广东| 亚洲成av人影院在线观看| 亚洲伊人久久大香线蕉av| 久久精品电影网站| 亚洲直播在线一区| 日韩电影中文字幕av| 亲爱的老师9免费观看全集电视剧| 欧美人在线观看| 精品国产91久久久久久老师| 8050国产精品久久久久久| 麻豆一区二区在线观看| 成人免费网视频| 国产精品久久97| 欧美性资源免费| 亚洲免费av网址| 91精品国产高清自在线| 91精品视频网站| 色综合伊人色综合网| 国产精品大片wwwwww| 91免费视频网站| 在线看欧美日韩| 欧美一区二区三区精品电影| 性色av一区二区三区红粉影视| 欧美精品免费看| 97婷婷涩涩精品一区| 91免费看片在线| 亚洲有声小说3d| 亚洲a成v人在线观看| 神马国产精品影院av| 久久99国产综合精品女同| 国产精品扒开腿做| 亚洲一区免费网站| 亚洲成avwww人| 精品久久香蕉国产线看观看gif| 成人av番号网| 国产日韩精品入口| 国产在线视频欧美| 亚洲美女av在线播放| 中文字幕亚洲国产| 中文欧美在线视频| 18久久久久久| 欧美重口另类videos人妖| 在线免费观看羞羞视频一区二区| 亚洲精品成人av| 亚洲免费伊人电影在线观看av| 国内精品久久久久影院优| 欧美日韩成人精品| 丰满岳妇乱一区二区三区| 日韩性xxxx爱| 欧美午夜激情在线| 久久99久久亚洲国产| 欧美一级片免费在线| www.亚洲成人| 精品国内自产拍在线观看| 日韩av黄色在线观看| 在线一区二区日韩| 亚洲女人被黑人巨大进入al| 在线观看精品自拍私拍| 亚洲一区二区三区在线视频| 色妞欧美日韩在线| 午夜精品久久久久久99热软件| 色偷偷9999www| 亚洲a级在线观看| 亚洲区免费影片| 欧美成年人网站| 欧美在线视频网| 乱亲女秽乱长久久久| 欧美激情2020午夜免费观看| 97热在线精品视频在线观看| 日韩极品精品视频免费观看| 国产精品视频网址| 97碰在线观看| 精品国产一区二区三区在线观看| 美女撒尿一区二区三区| 国产97色在线|日韩| 国内精品久久久久久中文字幕| 欧美乱人伦中文字幕在线| 色综合五月天导航| 国产精品久久久久久久久久ktv| 久久久久久一区二区三区| 欧美电影免费看| 亚洲人a成www在线影院| 日韩有码片在线观看| 欧美性xxxx极品hd满灌| 欧亚精品在线观看| 欧美视频一区二区三区…| www.欧美三级电影.com| 欧洲日本亚洲国产区|