1. 程式人生 > >Java IO學習總結筆記

Java IO學習總結筆記

Java的 IO 大致可以分成
      (1)對位元組流的輸入輸出,
      (2)對字元流的輸入輸出。
InputStream和OutputStream主要用於位元組流byte的輸入輸出,二進位制檔案。
Reader 和 Writer 主要用於字元流的輸入輸出,文字檔案。
流與Reader和Writer在結束使用的時候,需要正確地關閉它們。通過呼叫close()方法可以達到這一點。InputStream的關閉程式碼放到了finally塊中,無論在try-catch塊中發生了什麼,finally內的程式碼始終會被執行,所以這個InputStream總是會被關閉。
Java IO中也就基本流,檔案流和緩衝流,其他的都不常用。重點關注 基本流,檔案流和緩衝流。
如下表格
具體型別: 基本流,管道流,檔案流, 緩衝—對於每一種型別,位元組流和字元流都有對應實現
這裡寫圖片描述


這裡寫圖片描述
這裡寫圖片描述
這裡寫圖片描述

易混淆點
RandomAccessFile 真的可以在隨機位置進行讀寫操作嗎?
RandomAccessFile對檔案進行隨機存取。隨機存取並不意味著你可以在真正隨機的位置進行讀寫操作,它只是意味著你可以跳過檔案中某些部分進行操作,
並且支援同時讀寫,不要求特定的存取順序。這使得RandomAccessFile可以覆蓋一個檔案的某些部分、或者追加內容到它的末尾、或者刪除它的某些內容,
當然它也可以從檔案的任何位置開始讀取檔案。

Java IO中的管道能為不同JVM中的執行緒提供通訊嗎?
Java IO中的管道為執行在同一個JVM中的兩個執行緒提供了通訊的能力。所以管道也可以作為資料來源以及目標媒介。
你不能利用管道與不同的JVM中的執行緒通訊(不同的程序)。在概念上,Java的管道不同於Unix/Linux系統中的管道。在Unix/Linux中,執行在不同地址空間的兩個程序可以通過管道通訊。在Java中,通訊的雙方應該是執行在同一程序中的不同執行緒。

兩個相關聯的管道流能分配給同一個執行緒嗎?
當使用兩個相關聯的管道流時,務必將它們分配給不同的執行緒。read()方法和write()方法呼叫時會導致流阻塞,
這意味著如果你嘗試在一個執行緒中同時進行讀和寫,可能會導致執行緒死鎖。