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(newFileInputStream(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); } }