1. 程式人生 > >基礎複習2-IO流

基礎複習2-IO流

IO流(任何流寫預設都是覆蓋)

一、什麼流就用什麼陣列接收,位元組流byte[] b = reader.read(),位元組流char[] c = reader.read()

二、亞太地區編碼GBK,reader.getEncoding() = GBK,idea預設格式GBK會導致讀取中文檔案錯誤,找不到檔案

三、File->setting->Editor->File Encoding 改編碼

四、理論上java不存在記憶體洩漏,因為存在GC機制,當引用變數,物件資訊在使用完畢後會自動呼叫gc實現記憶體的回收。但是如果在程式中使用了第三方資源,比如檔案,網路,資料庫連線等一些資源,GC無法回收,需要主動close

五、轉換流用於位元組與字元流相互轉換

  1. 位元組流轉字元流:輸入Reader reader = new InputStreamReader(System.in);// 裝飾器模式
  2. 字元流轉位元組流:輸出Writer writer = new OutputStreamWriter(new FileOutputStream(File, true));

六、高階流,不用定義緩衝區大小了,直接讀一行

      BufferedReader:一般用於讀,可以一次讀一行

      BufferedWriter

      BufferedInputStream

      BufferedOutStream

七、列印流,只包含輸出流,不會丟擲任何IOException(一般用於寫,一次可以寫一行)例:

                                                                                             

       

PrintStream:位元組列印(位元組輸出),ps = new PrintStream(new File(“src/a.txt“)),pw.println(“字串”);       pw.writer(“字串”.getBytes());

PrintWriter:字元列印流呼叫println方法時,一定要呼叫重新整理flush(),或者pw = new PrintWriter(new FileOutputStream(new File(), append:true), true),否則檔案不會寫入資料。呼叫writer方法時,在使用了true的同時還要呼叫close或者flush,否則還是不會寫入資料。

使用flush的原因,資料存在於緩衝區中,呼叫flush將資料寫入檔案中。

       列印流和Buffered流互相裝飾pw = new PrintWriter(new FileWriter(new File(“src/a.txt”)))

八、追加輸出 new FileOutputStream(File, true);在檔案末尾追加輸出,不加true覆蓋

九、隨機訪問流:往檔案中間加資料,例如斷網後下次下載要從上次下載的地方開始繼續下。

RandomAccessFile特性:隨機訪問檔案流,可以從檔案的任意位置進行讀與寫,並且能夠對java的基本資料型別進行直接讀寫。

RandomAccessFile raf_read = new RandomAccessFile(file, "r");//可讀
RandomAccessFile raf_write = new RandomAccessFile(new File(dir, file.getName()), "rw");//可讀可寫
raf_read .seek(long position);//定位到position開始讀取 position的單位是位元組

十、物件的序列化與反序列化1:物件序列化就是將一個java物件直接儲存到檔案,網路,等其他的儲存介質中

實現步驟:1、讓需要序列化的物件所屬的類實現serializable介面

                  2、通過物件輸出流(ObjectOutputStream.writeObject(object))將java物件寫入檔案

特性:只儲存屬性,不儲存方法。Transient和static修飾的屬性不被序列化

物件的序列化與反序列化2

實現步驟:1、讓需要序列化的物件所屬的類實現Externalizable介面

                  2、重寫writeExternal和readExternal方法

                  3、通過物件輸出流將java物件寫入檔案

特性:只儲存屬性,不儲存方法。Transient和static修飾的屬性不被序列化