对象的输入输出流的作用: 用于写入对象 的信息读取对象的信息。 对象的持久化。 比如:用户信息。
ObjectInputStream : 对象输入流
ObjectOutPutStream :对象输出流
对象输入输出出流的使用注意点:
1.如果想将一个对象写入到磁盘中,那么对象所属的类必须要进行序列化实现Serializable接口,Serializable接口没有任何方法 ,是一个标记接口
2.如果对象所属的类的成员变量发生改变,你在读取原来的对象是就会报错,如果想要解决报错,保证serialVersionUID是唯一。
3.如果你不想将某些信息存入到磁盘 就可以同过transient关键字修饰成员变量
4.如果一个类中引用了另外的一个类,那么另外的这个类也要实现Serializable接口。
package com.beiwo.io; import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable; class Cat implements Serializable { private static final long serialVersionUID = 1L; // 保证所取对象信息唯一 String name;
public Cat(String name) {
// TODO 自动生成的构造函数存根
this.name = name;
} @Override
public String toString() {
// TODO 自动生成的方法存根
return "cat.name" + this.name;
}
} class Person implements Serializable { private static final long serialVersionUID = 1L; // 保证所取信息唯一 String name;
int age;
int id;
String sex;
// 如果不想把某些信息存入磁盘中 ,则需要通过transient关键字修饰成员变量
transient String password;
Cat cat;
// 构造方法
public Person(String name, int age, int id, String password, Cat cat){
this.name = name;
this.age = age;
this.id = id;
this.password = password;
this.cat = cat;
}
}
public class demo4 { /**
* @param args
* @throws IOException
* @throws ClassNotFoundException
*/
public static void main(String[] args) throws IOException, ClassNotFoundException {
// 调用方法
writeObject();
readObject();
}
// 读取数据到磁盘中
public static void readObject() throws IOException, ClassNotFoundException {
// TODO 自动生成的方法存根
// 找到目标文件
File file = new File("C:\\Users\\cdlx2016\\Desktop\\2\\cc.txt");
// 建立通道
FileInputStream inputStream = new FileInputStream(file);
// 创建对象输入流
ObjectInputStream objectInputStream = new ObjectInputStream(inputStream);
// 读取数据
Person person = (Person)objectInputStream.readObject(); // 打印数据
System.out.println("name: " + person.name + " age: " + person.age + " id: " + person.id + " 密码:" + person.password + " cat: " + person.cat); // 关闭数据
objectInputStream.close(); } // 写入对象
private static void writeObject() throws IOException {
// 找到目标文件
File file = new File("C:\\Users\\cdlx2016\\Desktop\\2\\cc.txt");
// 建立通道
FileOutputStream fileOutputStream = new FileOutputStream(file);
// 创建对象输出流
ObjectOutputStream objectOutputStream = new ObjectOutputStream(fileOutputStream);
// 创建对象
Person person = new Person("李四", 20, 1203, "369852", new Cat("大肥"));
// 写入数据
objectOutputStream.writeObject(person);
// 关闭流
objectOutputStream.close(); } }