Java:I/O流相關
阿新 • • 發佈:2018-11-26
基本資料流
DataInputStream / DataOutPutStream
操作基本資料型別的流,可以讀寫各種基本資料
記憶體操作流
對記憶體中的變數進行 I / O 操作 有C語言sprintf函式的影子
又像集合中的toArray填充一個數組
可以把流中的東西寫到變數中去
- 操作位元組陣列
- ByteArrayInputStream
- ByteArrayOutputStream
- 操作字元陣列
- CharArrayReader
- CharArrayWriter
- 操作字串
- StringReader
- StringWriter
關閉ByteArrayInputStream沒有任何效果; 在關閉流之後,可以呼叫此類中的方法,而不生成IOException
列印流
- 位元組列印流 PrintStream
- 字元列印流 PrintWriter
向文字輸出流列印物件的格式化表示形式
可輸出各種型別的資料
基於別的流構造該類的物件時,可選第二個引數為true開啟自動重新整理
自動重新整理在呼叫println,printf,及format方法時,自動flush
該類流可以在檔案上進行操作
標準輸入輸出流
System中的兩個靜態常量in
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