1. 程式人生 > 實用技巧 >2020/12/8 Java學習記錄No.11

2020/12/8 Java學習記錄No.11

1.Java中流的分類

從流動方向:輸入流&輸出流,InputStream&Outputstream

從讀取型別:位元組流:如System.in是一個InputStream型別位元組流

      字元流:如new InputStreamReader(System.in)是一個字元流物件

從流發生的源頭:節點流:直接操作目標裝置對應的流 如檔案流,標準輸入輸出流

        過濾流:繼承帶有關鍵字Filter的流 用於包裝操作節點流,方便讀寫各種型別的資料

———————————————————————————————————————————————————————————————————————

2.

————————————————————————————————————————————————————————————————————————————————————————————

3.流的裝配

位元組流——>解碼——>字元流

用到InputstreamReader

InputStreamReader ins = new InputStreamReader(new FileInputStream("c:\\text.txt"));

字元流——>譯碼——>位元組流

用到OutputStreamWriter或者PrintWriter

沒有改變流的內容,而是改變了看流的角度。

BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream("c:\\text.txt")));

Reader所有的子類都可以作為BufferedReader的引數,在ins中是一個字元一個字元讀,br則是一行一行讀。

———————————————————————————————————————————————————————————————————————

4.流的裝配

DataInputStream di = new DataInputStream(new BufferedInputStream(new
FileInputStream(f))); //可以利用DataInputStream物件方法進行讀操作,寫內容則同理

———————————————————————————————————————————————————————————————————————

5.物件的序列化(序列化)與持久化

物件序列化:將記憶體中的動態物件表達為可以傳輸的串形式,為了便於網上傳輸和介質儲存

物件持久化:將記憶體中的物件儲存到硬碟介質上

實質上是要解決物件在記憶體和物理儲存之間如何進行對映

物件——>序列化——>流

import java.io.*;
public class Student implements Serializable    //序列化
{
    int number=1;
    String name;
    Student(int number,String n1)
    {   this.number = number;
        this.name = n1;
    }
    Student()
    { this(0,""); }
    void save(String fname)
    {
        try
        {
            FileOutputStream fout = new FileOutputStream(fname);
            ObjectOutputStream out = new ObjectOutputStream(fout);
            out.writeObject(this);               //寫入物件
            out.close();
        }
        catch (FileNotFoundException fe){}
        catch (IOException ioe){}
    }
    void display(String fname)
    {
        try
        {
            FileInputStream fin = new FileInputStream(fname);
            ObjectInputStream in = new ObjectInputStream(fin);
            Student u1 = (Student)in.readObject();  //讀取物件
            System.out.println(u1.getClass().getName()+"  "+
                                 u1.getClass().getInterfaces()[0]);
            System.out.println("  "+u1.number+"  "+u1.name);
            in.close();
        }
        catch (FileNotFoundException fe){}
        catch (IOException ioe){}
        catch (ClassNotFoundException ioe) {}
    }
    public static void main(String arg[])
    {
        String fname = "Student.obj"; //檔名
        Student s1 = new Student(1,"Wang");
        s1.save(fname);
        s1.display(fname);
    }
}