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);
}
}
结果:中国首富,