1. 程式人生 > >黑馬程式設計師--各種過濾流與包裝類

黑馬程式設計師--各種過濾流與包裝類

各種過濾流與包裝類

   1)包裝類的概念與作用
 
   2)BufferedInputStream類與BufferedOuputStream類
        緩衝流為I/O流增加了記憶體緩衝區,增加緩衝區有兩個基本目的:
         第一個:java程式一次不只操作一個位元組,這樣提高了程式的效能
         第二個:由於有了緩衝區,使得在流上執行skip  mark reset方法都成為可能。

      BufferedInputStream類與BufferedOuputStream類是java提供的兩個緩衝區包裝類,不管底層系統是否使用了緩衝區,這兩個類在自己的例項物件中建立緩衝區

      建構函式:
           BufferedInputStream(InputStream in)

           BufferedInputStream(InputStream in,int size)
     

   3)DataInputStream類與DataOutputStream類

    DataOutputStream類三個寫入字串的方法
   
       public final void writeBytes(String s)

       public final void writeChars(String s)

       public fianl void writeUTF(String str)

   4)PrintStream類:提供了一系列的print 和 println方法,可以基本資料型別的資料格式化成字串輸出。

        PrintStream的建構函式:
            PrintStream(OutputStream out)       

            PrintStream(OutputStream out,boolean autoflush)

            PrintStream(OutputStream out,boolean autoflush,String encoding)
   5)ObjectInputStream類與ObjectOutputStream類

      ObjectInputStream類與ObjectOutputStream兩個包類,用於從底層輸入流中讀取物件型別的資料和物件型別的資料寫入到底層輸出流。

      ObjectInputStream類與ObjectOutputStream類所讀寫的物件必須實現了Serializable介面。物件中的transientN 和static型別成員變數不會被讀取和寫入。

   package cn;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInput;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;

 class Student implements Serializable {

  int id;
  String name;
  int age;
  String department;
 
 public Student(int id,String name,int age,String de){
  this.id=id;
  this.name=name;
  this.age=age;
  this.department=de;
  
 }
 
 public static class Serialization{
  public static void main(String[] args) throws IOException, ClassNotFoundException{
   Student stu1 = new Student(19,"張三",23,"軟體系");
   Student stu2 = new Student(21,"李四",23,"網路系");
  
   FileOutputStream fos = new FileOutputStream("student.txt");
   ObjectOutputStream os =new ObjectOutputStream(fos);
   os.writeObject(stu1);
   os.writeObject(stu2);
  
   os.close();
  
   FileInputStream fis = new FileInputStream("student.txt");
   ObjectInputStream ois =new ObjectInputStream(fis);
    stu1 = (Student)((ObjectInput) os).readObject();
    stu2 = (Student)((ObjectInput) os).readObject();
  
   ois.close();
  }
 }
}


   6)位元組流與字元流的轉換

  InputStreamReader和OutputStreamWriter, 是用於將位元組流轉換成字元流來讀寫的兩個類,InputStreamReader可以將一個位元組流中的位元組解碼成字元後讀取,
                                                                                   OutputStreamWriter將字元編碼成位元組後寫入到一個位元組流中。
                                                     

      InputStreamReader主要兩個建構函式
                InputStreamReader(InputStream in) 

                InputStreamReader(InputStream in,String CharsetName)

      OnputStreamWriter主要兩個建構函式:
                 OnputStreamWriter(OutputStream in)

                 OnputStreamWriter(OutputStream in,String str)

  注意:避免頻繁地在字元與位元組間轉換,最好不要直接使用

        InputStreamReader和OutputStreamWriter類來讀寫資料,應儘量使用BufferedWriter類包裝OutputStreamWriter類,用BufferedReader類包裝InputStreamReader