程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> Java IO流基礎

Java IO流基礎

編輯:關於JAVA

輸入輸出流想必大家已經用的非常熟練了,但是,我們往往忽略了身邊最熟悉的一些東西,又或者我 們只知道要這樣做,卻不知道為什麼這麼做,所以在這裡跟大家分享一下在網絡編程當中看到的一些關於 I/O流的細節,閒話不多說,下面開始:

OutputStream,顧名思義:輸出流,它的子類使用所提供的方法向某種媒體寫入數據,例如, FileOutputStream將數據寫入文件,TelnetOutputStream將數據寫入網絡連接,不過聽到這大家會問了, API中不存在TelnetOutputStream這個類呀,不過想必大家都記得,Sokcet類中有一個getOutputStream的 方法,這個方法是獲得連接對象的輸出流,返回的是OutputStream,其本質更徹底的說應該是網絡輸出流 ,這是多態的威力,如果你知道怎麼使用這些超類,你也就知道怎麼使用所有這些子類。

OutputStream中最基本的方法無疑就是write(int b)了,這裡雖然傳入了一個Int,但只接收0-255范 圍之內的整數,大家在DataOutputStream中想必還看到過一個writeByte(int v)的方法,這個方法確保 了一個Byte以一個Byte的形式寫入數據,並且將數據追加到了緩沖區中。

說到緩沖區就不得不提一個flush方法,想必大家也都用過它,我們知道在OutputStream調用write方 法的時候往往需要調用一個flush方法,簡單的說是為了刷新緩沖區,強制輸出數據,但是為什麼要強制 輸出呢?舉一個這樣的例子:假設一台服務器與一台客戶機之間正在進行通信,這個時候服務器在等待客 戶機的消息,如果客戶機發送了300個字節的請求,但是默認緩沖區的大小是1024個字節,那麼這個流的 緩沖區就會等待更多的數據到來,而客戶機以為自己的數據已經發出去了,自然會等待著服務器的響應, 結果服務器那邊由於緩沖區還沒滿,所以數據遲遲沒有來到,結果就形成了一種死鎖狀態。所以我們經常 會調用flush方法,不管你是否認為有必要刷新緩沖區,這都是很重要的,取決於你如何控制流的引用, 你可能知道流被緩沖,也可能不知道(例如,不管你是否希望,System.out都是緩沖的),flush相對程 序出錯而言是一個低成本的操作,所以在需要刷新輸出的時候不要忘了寫上哦。

InputStream,輸入流,其本質與輸出流剛好形成對立的關系,用來從媒體中讀取數據,最基本的方法 是沒有參數的read()方法,這個方法從輸入流的源中讀取一個字節數據,作為一個0到255的int返回,流 的結束由返回-1結束,read()方法會等待並阻塞其後的任何代碼的執行,知道有一個字節的數據可用。但 是我們在寫通信的時候卻往往不能用-1表示數據的結束,因為我們永遠不知道對方會在什麼情況下真正結 束通信,就像關閉連接一樣,另外一方得告訴你什麼在什麼情況下他這句話已經說完了,這就涉及到通信 協議了,下次再跟大家具體分析一下。

查看本欄目

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved