Java io流的學習,javaio流
最近幾天仔細學了Java的io流,本來是打算看視頻通過視頻來學習的,可是後來發現其實視頻看不怎麼懂也感覺不是很容易上手,所以就通過百度和api文檔學習了Java的io流
io流可以有兩個分類,一個是位元組流和字元流,另一個是輸入資料流和輸出資料流。
先說說位元組流和字元流吧:首先實際上位元組流在操作的時候是不會用到緩衝區的,是檔案本身的直接操作的,但是字元流在操作的時候下會用到緩衝區的,是通過緩衝區來操作檔案的。位元組流與字元流的其他區別呢就是讀寫單位不同,毫無疑問,字元流是以字元為單位,位元組流是以位元組為單位(一個位元組8個bit),由此可知兩種的處理對象不同,位元組流能處理所有類型的資料,而字元流只能處理字元類型的資料。所以我們可以得到一個結論,那就是只要是處理純文字資料,就優先考慮使用字元流,除此之外使用位元組流。
然後就要說一說輸入資料流和輸出資料流。老實說,從學C語言那時候開始我就輸入和輸出,output和input很混亂也很不明白。需要不斷去接觸才更加能夠牢記區別吧。輸入呢一般是指從外部檔案(如硬碟,鍵盤等)擷取資料,而輸出呢則是指從程式本身向外部輸出資料(如寫入檔案,顯示都螢幕上)。而輸入資料流和輸出資料流還有另一個區別,那就是對輸入資料流只能進行讀操作,而對輸出資料流只能進行寫操作。
說完這兩個大分類,我們可以來瞭解下其中更詳細的一些內容,看看一個類圖吧
由繼承圖看出來,字元輸入資料流Reader是所有的字元輸入資料流的父類。PIpedReader主要是可以通過與其他線程建成的管道讀取資料。
而InputStreamReader是一個串連位元組流和字元流的橋樑,可以將位元組流轉變為字元流。
字元輸出資料流Writer是所有的字元輸出資料流的父類。其他子類分別與Reader的各個子類相對應。
輸入位元組流InputStream是所有的輸入位元組流的父類。ByteArrayInputStream、StringBufferInputStream、FileInputStream是分別從對應檔案讀入資料
而PipedInputStream 是從與其它線程共用的管道中讀取資料。
輸出位元組流OutputSteam 是所有的輸出位元組流的父類。其他分別與InputSteam的子類相互對應。
整個IO類中除了位元組流和字元流還包括位元組和字元轉換流。
OutputStreramWriter將輸出的字元流轉化為位元組流
InputStreamReader將輸入的位元組流轉換為字元流
將位元組輸出資料流轉化為字元輸出資料流Writer out=
new
OutputStreamWriter(
new
FileOutputStream(file));
將位元組輸入資料流變為字元輸入資料流Reader read=
new
InputStreamReader(
new
FileInputStream(file));
那有一個問題,神惡魔時候才要用到轉換流呢:當位元組和字元之間有轉換動作時和流操作的資料需要編碼或者解碼的時候。
以內容為輸出輸入目的地,使用記憶體操作流ByteArrayInputStream 主要將內容寫入內容ByteArrayOutputStream 主要將內容從記憶體輸出內容操作流一般使用來產生一些臨時資訊採用的,這樣可以避免刪除的麻煩
合并流 SequenceInputStream SequenceInputStream主要用來將2個流合并在一起,比如將兩個txt中的內容合并為另外一個txt。
PushBackInputStream回退流:可以把讀取進來的某些資料退回到資料緩衝區
BufferedReader只能接受字元流的緩衝區,因為每一個中文需要佔據兩個位元組,所以需要將System.in這個位元組輸入資料流變為字元輸入資料流,採用:
BufferedReader buf =new BufferedReader( newInputStreamReader(System.in)); |
比較常用的是採用Scanner類來進行資料輸入Scanner sca =
new
Scanner(System.in);
// 讀一個整數
int
temp = sca.nextInt();
查了下api文檔關於scanner的內容發現Scanner的參數代表的是資料從哪裡掃描,scanner可以接受任何的輸入資料流
為System.out.println()重新導向輸出(可以把向控制台輸出改為寫入檔案操作)System.err重新導向 (可以將錯誤資訊寫入檔案儲存)
在流操作中經常需要用到:和\ 不推薦直接用,最好調用兩個常量File.separator(\)與File.pathSeparator(:),這樣處理的話跨平台操作會比較相容
如果想在檔案中換行的話,需要使用“\r\n”
java的io流這章到底該怎學?很
有字元流,位元組流。
字元流一般是需要處理字串的時候用的,比如按行讀,對讀出來的字串進行替換,比較等。
位元組流一般就是簡單的讀或者寫檔案。
具體到每個細的,就需要經驗積累了,常用的就那幾個。
字元流就是BufferedWriter,BufferedReader.
位元組流就是FileInputStream,FileOutputStream,DataInputStream,DataOutputStream。
有問題繼續問。
java io流詳解
我想樓主是想多了...
記輸入輸出資料流很簡單的...在我學習輸入輸出資料流的時候是這樣記的:
輸入資料流: 是讀取(從檔案或系統中)
輸出資料流: 是寫入(到檔案或記憶體中)
樓主覺得這個怎麼樣???
挺好理解的吧??? 就是按相反的方向理解就對...既方便又實用....
呵呵....
祝君早日成功!
OutputStream 是輸出資料流吧...它的方法write()當然就是把括弧裡的參數寫到指定的檔案中去啦! 沒錯呀!
write(int b) 這函數的意思就是將一個整形的 b 寫入到指定的檔案中去
如果還有什麼不理解的話...請與我取得聯絡...