Java_IO

IO技術在Java上是非常常見的,今天來梳理一下IO方面的知識。

在很長的一段時間裏面,我也很困惑,IO裏面一大堆,又是InputStream,outputStream 的,然後又是Writer 和 Reader ,仔細一看,唉。有些還帶有Buffer的。本來暈頭轉向的,現在徹底找不到北了。


首先,先來個分類。分類都一樣,按兩大類分:

按照流向分是輸入流和輸出流,

按照處理單位分爲字節流和字符流


下面來看看這張圖:


圖不是我畫的,是別人那裏複製粘貼過來的,哈哈。這裏粘貼的,在此謝謝了!


首先要搞清楚一點的是:

輸入流和輸出流,什麼時候用輸入流,什麼時候用輸出流。所謂的輸入輸出是相對於程序(內存)來說的,如果是從外面(硬盤)讀取數據,那麼就用輸入流,如果要往外面寫出數據,那麼就用輸出流。就這麼簡單,不要再迷糊了。


下面來看字節流和字符流:

從上面那張圖可以看到,字節流都是 InputStream  和 OutputStream 結尾的,而字符流是 Writer 和 Reader 結尾的,這就很好區分了嘛,一看就知道什麼是字節流,什麼是字符流。好了,搞清楚這個就看下一個問題,什麼時候該用字節流,什麼時候該用字符流?

記住,凡是操作文本文件,注意,是文本文件,那麼就用字符流。例如:txt記事本文件

凡是操作的是非文本文件,那麼就用字節流,例如:圖片,音頻,視頻。word文檔等

前面不是說文本文件都用字符流去操作麼,怎麼word是用字節流了呢?這不扯淡麼?別,這不是扯淡,word是不是也可以插入圖片等,對吧,前面不是說圖片是用字節流去操作的麼。對吧,還有一點就是word是經過加密了的,只有word軟件才能打開,其他軟件都不行,對吧,這就對了嘛。所以,word也是用字節流去操作。


字節流和字符流都搞清楚了,咦,圖上面不是還有 buffer 的麼?這又是什麼鬼,唉。名字上不是很清楚了麼,人家是帶了個Buffer 緩衝數組的啊,然後就沒其他了。

不過還有一點很重要的是;凡是帶有Buffer的,都不具備操作文件的能力,也就是說,它本身是不能去讀取和寫入東西的,沒事可以看看這些buffer的構造方法,帶有Buffer的構造方法裏面,一般都需要你傳入一些inputStream或者outStream,對了,順便再說一句,雖然不具備讀寫文件能力,但人家也有close的方法,這是爲什麼呢?還有爲什麼,沒爲什麼,你不是傳進去一個麼?其實關閉的就是你傳進去的這個。所以說,close  buffer之後,就不需要對傳進去的進行關閉了,沒意義的!


好了,什麼基礎的理論知識先講到這裏,下面開始學習!代碼是最好的老師嘛,對吧,不管什麼都要實踐一下,


FileInputStream和FileOutputStream的簡單使用

Java_IO_BufferedIntputStream_And_BufferedOutputStream

Java_IO_ObjectInputStream_And_ObjectOutputStream

Java_IO_字節流_Reader_and_Writer

Java_IO_SequenceInputStream文件的合併

(後續更新。。。)

發佈了38 篇原創文章 · 獲贊 25 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章