IO流用來處理設備間數據傳輸,java對數據的操作是通過流的方式,而這些操作流的對象被封裝在IO包中。流可以分為字符流和字節流。字符流可以設置編碼方式,這就使得處理文本更加方便。
IO常用基類字節流抽象基類InputStream,OutputStream。字符流抽象基類Reader,Writer。
字符流體系抽象基類Writer共性方法:write();flush();close();append()
子類FileWriter用于寫入文件。該類對象一被初始化就要指定被操作的文件。write方法將數據寫入流,flush方法刷新流,close刷新并關閉流。
抽象類基類 Reader共性方法:read();skip();reset();ready()
子類FileReader用于讀取文件。對象初始化時要指定被讀取的文件。read()方法將數據讀入流。
IO異常處理IOException
流對象fw要放在try塊外面聲明,在內部初始化,以便在finally中能訪問到;fw只有不為null時才能調用close方法,所以需要有判斷。
字符流的緩沖區字符流的緩沖區提高了IO的效率,需要結合流才能使用,在流的基礎上對流的功能進行了增強。對應的類為BufferedReader和BufferedWriter。
BufferedWriter將文本寫入字符輸出流,緩沖各個字符,從而提供單字符,字符數組,字符串的高效寫入。所以,在創建緩沖區之前要現有流對象,只要把流對象加入構造函數,再調用緩沖區的寫入方法即可。
BufferedReader從字符輸入流中讀取文本,緩沖各個字符,從而實現字符,數組,行的高效讀出。
子類LineNumberReader跟蹤行號的緩沖字符輸出流,通過setLineNumber和getlLineNumber方法可以設置和獲取當前行號。
字節流體系抽象基類OutputStream共性方法:write();flush();close();
子類FileOutputStream用于寫入文件。該類對象一被初始化就要指定被操作的文件。write方法將數據寫入流,flush方法刷新流,close刷新并關閉流
抽象類基類 InputStream共性方法:read();skip();reset();ready()
子類FileInputStream用于讀取文件。對象初始化時要指定被讀取的文件。read()方法將數據讀入流,available()返回可以讀到的字節數。
字節流的緩沖區對應的類為BufferedOutputStream和BufferedInputStream
BufferedOutputStream該類實現緩沖的輸出流,通過設置這種輸出流,應用程序就可以將各個字節寫入底層輸出流中,不必針對每次字節寫入調用底層系統。
BufferedInputStream同字符流緩沖區相同。
讀取轉換流InputStreamReader類將字節流轉換為字符流。它指定字符集來讀取字節并解碼成字符。為了達到高效率,可以考慮在BufferedReader內包裝InputStreamReader。
寫入轉換流OutputStreamWriter類將字符流轉換為字節流。可以指定字符集來編碼成字節。為了達到高效率,可以考慮在BufferedWriter內包裝OutputStreamWriter。
輸入流操作時應明確源----橋梁(符節轉換)----緩沖,輸出流操作應明確目的------橋梁(符節轉換) ------緩沖。
Flie類用來將文件或文件夾封裝成對象,方便對文件和文件夾操作,也可以作為參數傳遞給流的構造函數。
常用方法:
canExcute();canRead();canWrite();exist();isDirectory();isFile()
該類是集合中與IO相結合的集合容器,是hashtable的子類,即具備map集合的特點,且鍵值對都是字符串。該類對象可以用于鍵值對形式的配置文件。
作為outputStream的子類,為其他輸出流添加了功能,使它們能打印各種數值表示形式。將各種數據都原樣打印。可以直接操作文件,它的構造函數接受file對象,文件路徑,字節輸出流。
字符輸出流PrintWriter類它的構造函數可以接受file對象,文件路徑,字節輸出流outputstream,字符輸出流Writer
SequenceInputStream將多個輸入流合并成一個輸入流。
對象的序列化實現堆內存中數據對象的存取,需要用到ObjectOutputStream和ObjectInputStream類來實現,也稱為對象的持久化或對象的序列化。
類通過實現接口serializable來啟用它的序列化功能。類中的靜態成員變量是不能被序列化的,因為靜態成員變量并不在堆內存中存儲,而是存儲在內存方法區中。非靜態成員如果加上transient關鍵字修飾,則也可以不被序列化。
管道流通過管道流輸入和輸出可以直接連接,通過結合線程使用,需要用到PipledOutputStream和PipledInputStream類來實現.
管道輸入流應該連接到管道輸出流;管道輸入流提供要寫入管道輸出流的所有輸入字節。通常情況下,數據由某個線程從PipledInputStream對象讀取,并由其他線程寫入到對應PipledOutputStream對象中去。
隨機訪問文件RandomaccessFile類的對象能對文件進行隨機的讀寫操作,內部封裝了byte數組,通過指針對數組操作。通過getFilePointer()獲取指針位置,通過seek改變指針位置。
新聞熱點
疑難解答