1 . 对象流操作的是文件字节流,也就是说new对象流的对象时,构造方法中的参数是一个文件字节流对象.
想要将对象持久化的存储下来, 需要通过对象流写
2 . 首先,类要实现Serializable接口.是为了可序列化.
序列化 : 可以将对象转成字节 (序列化的作用:将对象转成 字节一会 就可以支持 本地存储, 或者 通过网络传递)
反序列化: 将字节转成对象(作用:序列化的作用:将对象转成字节 , 就可以支持 本地存储, 或者 通过网络传递)
3 . 步骤: * 如果想要对象流存储对象
* 1 让类 实现 序列化的接口
* 2 创建对象
* 3 让对象流存储
* 4 创建对象输入流对象
* 5 readObject
package com.qf.demo4;
import java.io.Serializable;
/**
* 想要序列化这个类 Serializable
* @author Administrator
*
*/
public class Person implements Serializable{
private String name;
private int age;
public Person(String name, int age) {
super();
this.name = name;
this.age = age;
}
public Person() {
super();
}
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;
}
@Override
public String toString() {
return "Person [name=" + name + ", age=" + age + "]";
}
}
3 . 将对象保存到文件中时会乱码,是正常的,不用处理.
但从文件读取对象时,读出来的对象数据不是乱码.
main方法:
package com.qf.demo4;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
/**
* 对象流 :
* 读和写对象
*
* 想要将对象持久化的存储下来, 需要通过对象流写
*
*
* 序列化 : 可以将对象 转成字节
* 反序列化: 将字节转成对象
*
* 序列化的作用:
* 将对象转成 字节一会 就可以支持 本地存储, 或者 通过网络传递
*
*
* 持久化存储
*
*
* 如果想要对象流存储对象
* 1 让类 实现 序列化的接口
* 2 创建对象
* 3 让对象流存储
*
* 4 创建对象输入流对象
* 5 readObject
*
*
*/
public class Test {
public static void main(String[] args) {
Person person = new Person("小明", 5);
// 没有别序列化的对象不能存到对象流中 会报异常 NotSerializableException
// Test test = new Test();
Person person2 = new Person("小红", 5);
ObjectOutputStream oos = null;
ObjectInputStream ois = null;
try {
oos = new ObjectOutputStream(new FileOutputStream(new File("persons.txt")));
oos.writeObject(person);
oos.writeObject(person2);
oos.flush();
// 想要取出来 读取来 用 InputSteam
// readObject 在读取的过程中 按照存入顺序读取的
ois = new ObjectInputStream(new FileInputStream(new File("persons.txt")));
//向下转型
Person person3= (Person)ois.readObject();
System.out.println(person3);
Person person4 = (Person) ois.readObject();
System.out.println(person4);
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}