1. 程式人生 > >JAVA IO流——字元流和位元組流的粗淺理解

JAVA IO流——字元流和位元組流的粗淺理解

本人在使用IO流是經常在選擇是output還是input,reader還是writer中糾結一會,歸根結底還是沒有對IO流方向問題擁有自己的理解。
位元組流和字元流,顧名思義,前者和位元組打交道,後者和字元打交道。
位元組流和字元流都分為輸入和輸出兩個方向,掌握什麼時候使用輸入,什麼時候使用輸出,才能編寫正確的程式碼。我認為站在程式的角度來理解輸入與輸出兩個方向是比較準確地。
當程式需要資料時,使用輸入流寫入記憶體,input。
當程式需要資料時,使用輸出流寫出外部裝置,output。
不管怎麼形容,都要站在記憶體(程式)角度來分辨這個方向,若是沒有參照物就很容易混亂。

在位元組流和字元流之間,是可以轉換的。
位元組流轉字元流,使用InputStreamReader

“包裹著” InputStream
字元流轉位元組流,使用OutputStreamWriter “包裹著” OutputStream
在剛開始學習的時候,我會感到迷惑,為什麼是InputStreamReader而不是InputStreamWriter?為什麼是OutputStreamWriter而是OutputStreamReader?
我站在記憶體角度看,難道不是輸入是寫入記憶體?輸出是從記憶體讀東西出來嗎?這命名頓時讓我理解有點變得混亂?我不知道是否有人和我一樣感到迷惑。
經過反覆總結,我覺得應該如此理解才不會混亂。首先應該明確,InputStreamReader屬於Reader的一種,OutputStreamWriter屬於Writer一種。還是原來的的角度,站在記憶體角度
,read是記憶體read,read什麼?read外部的資料,那麼write就是記憶體往外部寫資料。那便有這樣子的理解對應
OutputStream --- Read
InputStream --- Write
這樣子便能和之前所想統一起來,均站在記憶體的角度來考慮,是記憶體(程式)來做某種操作。
這也讓我更好理解為何InputStreamReader後面是Reader,OutputStreamWriter後面是Writer了。

有理解錯誤的地方,歡迎告知。