Io对象流的概述:

对象流 OOS一对高级流,作用是进行对象序列化与反序列化 即:可以将一个对象按照其结构转换为一组字节和将这组字节还原为该对象。所以使用对象流可以很方便的读写java对象

为了方便对Io对象流的演示,首先先新建一个测试类用于对Io对象流的具体演示:

package Iodataflow.test_io;
 
import java.io.Serializable;
import java.util.Arrays;
 
/**
 * 此类用于测试Io对象流 用对象流对对象的属性和各种值进行读和写操作
 * 
 * 如果该类实例希望被对象流读写,那么这个类必须实现 接口:java.io.Serializable
 *
 */
public class Person_Test_Io implements Serializable {
 
	/**
	 * 当一个属性被transient修饰符修饰的话 那么在文件写入的和读取的时候将会被忽略 那么任何时候都会为空
	 */
	private static final long serialVersionUID = 1L;
	private String name;
	private int age;
	private String gender;
	private transient String[] otherInfo;
 
	// 全参构造方法
	public Person_Test_Io(String name, int age, String gender, String[] otherInfo) {
		super();
		this.name = name;
		this.age = age;
		this.gender = gender;
		this.otherInfo = otherInfo;
	}
 
	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 getGender() {
		return gender;
	}
 
	public void setGender(String gender) {
		this.gender = gender;
	}
 
	public String[] getOtherInfo() {
		return otherInfo;
	}
 
	public void setOtherInfo(String[] otherInfo) {
		this.otherInfo = otherInfo;
	}
 
	// 重写toString方法
	public String toString() {
		return "Person_Test_Io [name=" + name + ", age=" + age + ", gender=" + gender + ", otherInfo="
				+ Arrays.toString(otherInfo) + "]";
	}
 
	public static void main(String[] args) {
 
	}
 
}
 

下面展示类对对象类输出到文件的方法和操作步骤:

package Iodataflow.test_io;
 
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
 
/****************************************************
 * 对象流 OOS * 一对高级流,作用是进行对象序列化与反序列化 * 即:可以将一个对象按照其结构转换为一组字节 * 和将这组字节还原为该对象。 * *
 * 所以使用对象流可以很方便的读写java对象。 *
 ****************************************************/
public class OOSDemo {
 
	public static void main(String[] args) throws IOException {
 
		/****************************************
		 * 将一个Person实例写入文件person.obj *
		 ****************************************/
 
		// 实例化一个对象
		Person_Test_Io p = new Person_Test_Io("星辰", 20, "男", new String[] { "著名黑客", "擅长使用各种手段黑入他人的一切连接互联网的设备" });
 
		// 将对象写入到文件
		FileOutputStream fos = new FileOutputStream("person.obj");
		ObjectOutputStream oos = new ObjectOutputStream(fos);
		/**
		 * 对象流提供了写出对象的操作,该方法会将给定的对象 按照其结构转换为一组字节并写出 1:该方法要求写出的对象所属类必须实现Serializable
		 * 否则写出是会抛出异常 2:将一个对象转换为一组字节,这组字节比这个对象实际 保存的数据要大,因为还包含了该对象的机构信息
		 *
		 * 这里写出对象需要两个步骤 1:对象经过对象输出流时,对想输出流将对象序列化为一组字节 2:这组字节再经过文件流被写入了文件(写入磁盘),这个过程称之为
		 * "数据持久化"
		 */
		oos.writeObject(p);
		System.out.println(p + "\n" + "写入完毕");
		oos.close();
	}
}

下面展示读取对象流的方法和操作步骤:

package Iodataflow.test_io;
 
import java.io.FileInputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
 
/****************************************
 * 使用对象输入流将一个对象读取出来 *
 ****************************************/
public class OisDemo {
 
	public static void main(String[] args) throws IOException, ClassNotFoundException {
 
		// 创建文件流,在用一个超级流连接fis 用于对对象的数据的操作
		FileInputStream fis = new FileInputStream("person.obj");
		ObjectInputStream ois = new ObjectInputStream(fis);
		// 将读取到的对象数据赋值给p,必须强转成对应的类才可以
		Person_Test_Io p = (Person_Test_Io) ois.readObject();
		System.out.println(p);
		ois.close();
	}
 
}