1. 程式人生 > >Java:I/O流相關

Java:I/O流相關

基本資料流

DataInputStream / DataOutPutStream
操作基本資料型別的流,可以讀寫各種基本資料


記憶體操作流

對記憶體中的變數進行 I / O 操作 有C語言sprintf函式的影子
又像集合中的toArray填充一個數組
可以把流中的東西寫到變數中去

  • 操作位元組陣列
    • ByteArrayInputStream
    • ByteArrayOutputStream
  • 操作字元陣列
    • CharArrayReader
    • CharArrayWriter
  • 操作字串
    • StringReader
    • StringWriter
      關閉ByteArrayInputStream沒有任何效果; 在關閉流之後,可以呼叫此類中的方法,而不生成IOException

列印流
  • 位元組列印流 PrintStream
  • 字元列印流 PrintWriter
    向文字輸出流列印物件的格式化表示形式
    可輸出各種型別的資料
    基於別的流構造該類的物件時,可選第二個引數為true開啟自動重新整理
    自動重新整理在呼叫println,printf,及format方法時,自動flush
    該類流可以在檔案上進行操作

標準輸入輸出流

System中的兩個靜態常量in

out分別代表系統標準的輸入輸出裝置,預設輸入裝置是鍵盤,預設輸出裝置為顯示器
System.in的型別是InputStream,System.out的型別為PrintStream


隨機訪問流

嚴格來說RandomAcessFile並不是一種Stream,因為它直接繼承於Object
但是它實現了InputStream與OutputStream的功能,支援對隨機訪問檔案的讀取和寫入
使用getFilePointer方法得到目前檔案指標的位置,使用seek方法改變檔案指標的位置


序列化流

ObjectOutputStream 序列化流 將物件序列化後寫入檔案
ObjectInputStream 反序列化流 將序列化的資料轉換為物件

序列化

  • 以某種儲存形式使自定義物件持久化
  • 可以使物件在不同環境中傳遞
  • 實現了標記介面Serializable 的類可以序列化
    //反序列化的錯誤問題
    序列化會記錄物件的類的UID,而Java檔案每次修改會使UID變化,本地類的UID與序列化資料中的UID不同產生異常,因此在該類中定義出UID靜態常量即可
    使用transient關鍵字修飾的成員變數會防止被序列化

集合Properties (屬性)

Properties是Hashtable的子類,所以具有Map的性質

  • Properties特有的方法

    • public Object setProperty(String key,String value)//規定了鍵和值都為String的Map的put方法
    • public String getProperty(String key)//使用此屬性列表中指定的鍵搜尋屬性
    • public Set < String > stringPropertyNames()//返回鍵與值均為String型別的鍵
  • Properties與 I / O 流的結合使用

    • public void load(Reader reader)//把流(檔案)中的鍵值對資料放到集合中
    • public void store(Writer writer , String comments) //把集合中的資料放到流(檔案)中

2018/8/6