(IO流類示例四)ObjectOutputStream、ObjectInputStream、BufferedReader、PrintWriter
ObjectOutputStream(物件輸入流)ObjectInputStream(物件輸出流):高階流,用於將物件寫入到檔案中,或者從檔案中讀取一個物件。如果物件要能夠使用上述流進行檔案中的輸入輸出,所寫入物件需要實現序列化介面,而實現序列化介面不需要實現任何方法,因為Serializeable中沒有任何抽象方法,實現該介面只是為了表明該類的物件可被序列化和反序列化,並且在該類中要新增serialVersionUID屬性,在對物件實現反序列化時會對該該屬性進行檢查,只有與該類的serialVersionUID一致時才能夠實現反序列化從並檔案中讀出,否則會丟擲異常。*關鍵字transient:表示忽略,用此關鍵字修飾的屬性不會被序列化到檔案中自然在反序列化時該屬性沒有值。
序列化:將物件轉換成位元組陣列寫入到檔案的過程
反序列化:將位元組陣列轉換成物件從該檔案中提取出來的過程
例一:
①定義一個person類(實現了Serialzable介面,新增新生成的版本號serialVersionUID)
package com.hyxy0909;
import java.io.Serializable;
public class Person implements Serializable{
private static final long serialVersionUID = 2891463409523749601L;
private String name;
private int age;
private String sex;
private int money;
private boolean isMarry;
public Person(){
super();
}
public Person(String name, int age, String sex, int money, boolean isMarry) {
super();
this.name = name;
this.age = age;
this.sex = sex;
this.money = money;
this.isMarry = isMarry;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public int getMoney() {
return money;
}
public void setMoney(int money) {
this.money = money;
}
public boolean isMarry() {
return isMarry;
}
public void setMarry(boolean isMarry) {
this.isMarry = isMarry;
}
public String toString() {
return "name=" + name + ", age=" + age + ", sex=" + sex + ", money=" + money + ", isMarry=" + isMarry ;
}
}
②寫入物件
package com.hyxy0909;
import java.io.FileOutputStream;
import java.io.ObjectOutputStream;
public class ObjectOutputStreamDemo1 {
public static void main(String[] args) throws Exception {
Person p=new Person("張三", 23, "男", 5600, true);
ObjectOutputStream oos=new ObjectOutputStream(new FileOutputStream("Person.java"));
oos.writeObject(p);
oos.close();
}
}
③讀出物件
package com.hyxy0909;
import java.io.FileInputStream;
import java.io.ObjectInputStream;
public class ObjectInputStreamDemo1 {
public static void main(String[] args) throws Exception {
ObjectInputStream ois=new ObjectInputStream(new FileInputStream("Person.java"));
Person p=(Person)ois.readObject();
System.out.println(p);
}
}
結果:name=張三, age=23, sex=男, money=5600, isMarry=true,
OutputStreamWriter(輸入流)、InputStreamReader(輸出流):字元輸入輸出流(高階流),頂級父類是Reader和Writer,是按字元進行讀寫操作的。
例二:
①寫入
import java.io.FileOutputStream;
import java.io.OutputStreamWriter;
public class OutputStreamWriterDemo1 {
public static void main(String[] args) throws Exception {
OutputStreamWriter osw=new OutputStreamWriter(new FileOutputStream("osw.txt"),"GBK");
osw.write("中國首富");
osw.close();
}
}
②讀出
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.InputStreamReader;
public class BufferedReaderDemo1 {
public static void main(String[] args) throws Exception {
BufferedReader br=new BufferedReader(
new InputStreamReader(
new FileInputStream("pw.txt")));
String str=br.readLine();
System.out.println(str);
}
}
結果:中國首富,