IO流——物件流
物件流
(1)序列化和反序列化
Java中的序列化是指把Java物件轉換為位元組序列的程序
物件---序列化--->01010101
Java中的反序列化是指把位元組序列恢復為Java物件的程序
01010101---反序列化--->物件
(2)如何實作序列化和反序列化
使用物件流即可實作物件的序列化和反序列化
ObjectOutputStream類中的方法可以完成物件的序列化:
public final void writeObject(Object obj){..}
ObjectInputStream類中的方法可以完成物件的反序列化:
public final Object readObject(){..}
(3)序列化的要求
只有實作了java.io.Serializable介面的類的物件才可以被序列化,否則序列化時會報錯
(4)transient關鍵字
在物件序列化的時候,被transient修飾的屬性的值,在序列化程序中是會被忽略掉的,
測驗步驟:
1.準備Thacher類
package com.work.day23;
import java.io.Serializable;
//我們的思路:
/*a.創建Teacher類,屬性包含id,name,salary
b.從控制臺輸入教師基本資訊,資料之間通過“ - ”分割(每一行為一個老師的資訊),當輸入exit時結束
c.從控制臺獲取教師資訊后創建教師物件,將物件添加到集合中
d.將集合寫到檔案中
e.再從檔案中讀取集合進行遍歷輸出*/
public class Teacher implements Serializable {//實作序列化介面
/**
*
*/
private static final long serialVersionUID = 1L;//給物件提供序列號
private int id;
private String name;
private double salary;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getSalary() {
return salary;
}
public void setSalary(double salary) {
this.salary = salary;
}
public Teacher(int id, String name, double salary) {
super();
this.id = id;
this.name = name;
this.salary = salary;
}
public Teacher() {
super();
// TODO Auto-generated constructor stub
}
@Override
public String toString() {
return "Teacher [id=" + id + ", name=" + name + ", salary=" + salary + "]";
}
}
2.準備一個檔案a.txt
3.開始測驗,測驗檔案Test
package com.work.day23;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class Test {
@SuppressWarnings({ "resource", "unchecked" })
public static void main(String[] args) throws Exception {
List<Teacher> list = new ArrayList<Teacher>();// 創建集合
while (true) {// 將教師資訊回圈添加到集合中
Scanner scan = new Scanner(System.in);
System.out.println("請輸入教師的資訊:");
String nextLine = scan.next();
String[] split = nextLine.split("[-]");// 將教師資訊用"-"進行分割
if (nextLine.equals("exit")) {// 輸入exit退出回圈
break;
}
Teacher t = null;
t = new Teacher(Integer.parseInt(split[0]), split[1], Double.parseDouble(split[2]));
list.add(t);// 將教師資訊添加到集合中
}
String file ="src/com/work/day23/a.txt";
FileOutputStream out = new FileOutputStream(file);// 我們a.txt檔案的路徑
ObjectOutputStream os = new ObjectOutputStream(out);// 使用物件流進行包裝
os.writeObject(list);// 將裝有物件的集合寫入檔案中
os.flush();
os.close();
FileInputStream in = new FileInputStream(file);
ObjectInputStream ins = new ObjectInputStream(in);// 使用物件流進行包裝
List<Teacher> ls = (List<Teacher>) ins.readObject();// 將讀出的教師資訊存入到集合中
for (Object o : ls) {// 遍歷集合中教師的資訊
System.out.println(o);
}
ins.close();
in.close();
}
}

a.txt內容:
這個檔案不是讓咋們看的,這是讓另一個反序列化流看的,(ObjectInputStream),
下期再見!
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/199808.html
標籤:其他
上一篇:springboot操作阿里云OSS實作檔案上傳,下載,洗掉
下一篇:oracle 11g 的游標
