1.IO的引入

2.IO流的分類
流向:
輸入流 讀取資料
輸出流 寫出資料
資料類型:
位元組流
位元組輸入流 讀取資料 InputStream
位元組輸出流 寫出資料 OutputStream
字元流
字元輸入流 讀取資料 Reader
字元輸出流 寫出資料 Writer
我們一般在探讨IO流的時候,如果沒有明确說明按照那種分類來說,預設情況下是按照資料類型來分的。
3.寫入資料
4.實作資料的追加寫入
5.加入異常處理的位元組輸出流操作
6.讀取資料
改進版
7.複制檔案
不過這種方式每次都是讀取一個位元組,效率太慢了,如果讀取大的檔案,這種方式就不适合。
看到這裡很多人都崩潰了,為什麼這麼寫呢?哈哈,且聽老夫來分解代碼?
如果我a.txt檔案中的内容是
hello
world
java
那麼我們按照下面的代碼來執行
結果是這樣的
hello5
--------------
wor5
ld
j5
ava
j3
why?
其實a.txt的内容是下面這樣的啊
hello\r\n
world\r\n
java\r
我們是不是定義byte[] b = new byte[5];
第一次
hello 長度是5
第二次
\r\nwor 長度也是5
其實第二次相當于
b[0]=\r
b[1]=\n
b[2]=w
b[3]=o
b[4]=r
當然這些字元的底層會轉換為byte的,不用擔心啊,我這樣寫隻是為了讓各位了解
第三次
ld\r\nj 長度也是5
b[0]=l
b[1]=d
b[2]=\r
b[3]=\n
b[4]=j
第四次
ava\rj 長度也是5 是不是不了解啦
第三次的是不是這樣的
但是這次其實隻有ava,那麼數組中是不是這樣排列?
b[0]=a
b[1]=v
b[2]=a
那麼第4,第5個元素呢,當然是第三次的,因為這一次是沒有字元去指派的。
懂了沒?
但是我們如何避免這種情況呢?
看上面的len,就是每次讀取的位元組長度。5,5,5,3
那麼,我們的代碼改成下面的樣子,是不是可以避免上面的問題呢?
ava3
此時,輸出的就是我們想要的啦。
那麼現在看懂下面的代碼嗎?
8.位元組緩沖流
位元組流一次讀寫一個數組的速度明顯比一次讀寫一個位元組的速度快很多哦,這是加入數組這樣的緩沖效果,java本身在設計的時候,也考慮到了這樣的設計思想(裝飾模式),是以提供了位元組緩沖區流
位元組緩沖輸出流
BufferedOutputStream
位元組緩沖輸入流
BufferedInputStream