对象的输入输出流的作用: 用于写入对象 的信息和读取对象的信息。 使得对象持久化。
ObjectInputStream : 对象输入流
ObjectOutPutStream :对象输出流
简单的实例
1 import java.io.File; 2 import java.io.FileInputStream; 3 import java.io.FileOutputStream; 4 import java.io.IOException; 5 import java.io.ObjectInputStream; 6 import java.io.ObjectOutputStream; 7 import java.io.Serializable; 8 9 //创建要写入磁盘的类,这个类需要实现接口 Serializable(可系列化的) 10 class Student implements Serializable{ 11 12 // 在这里保证了serialVersionUID 的唯一性,防止属性变量的临时改变,从而造成写入id与读取id不同 13 private static final long serialVersionUID = 1L; 14 int id ; //额外需要添加一个属性 15 16 String name ; 17 transient String sex; //transient修饰属性,表示暂时的,则这个属性不会被写入磁盘 18 transient int age; 19 20 public Student(String name,String sex,int age){ 21 this.name = name; 22 this.sex = sex; 23 this.age = age; 24 } 25 } 26 27 28 public class objectIO { 29 30 /** 31 * @param args 32 * @throws IOException 33 * @throws ClassNotFoundException 34 */ 35 public static void main(String[] args) throws IOException, ClassNotFoundException { 36 // TODO Auto-generated method stub 37 38 createObj(); 39 readObj(); 40 } 41 42 //(一)先写入对象 43 public static void createObj() throws IOException { 44 //1.创建目标路径 45 File file = new File("C:\\Users\\bg\\Desktop\\objTest.txt"); 46 //2.创建流通道 47 FileOutputStream fos = new FileOutputStream(file); 48 //3.创建对象输出流 49 ObjectOutputStream objOP = new ObjectOutputStream(fos); 50 //4.创建类对象,并初始化 51 Student stu = new Student("玛丽苏", "男", 18); 52 //5.向目标路径文件写入对象 53 objOP.writeObject(stu); 54 //6.关闭资源 55 objOP.close(); 56 } 57 58 //再读取对象 59 public static void readObj() throws IOException, ClassNotFoundException { 60 File file = new File("C:\\Users\\bg\\Desktop\\objTest.txt"); 61 FileInputStream fis = new FileInputStream(file); 62 ObjectInputStream objIP = new ObjectInputStream(fis); 63 //读取对象数据,需要将对象流强制转换为 要写入对象的类型 64 Student stu = (Student)objIP.readObject(); 65 System.out.println("\n name:"+stu.name+"\n sex:"+stu.sex+"\n age:"+stu.age); 66 objIP.close(); 67 } 68 69 }
打印效果
name:玛丽苏 sex:null //后面的这连个属性使用了 transient修饰 age:0
用到方法:writeObject(Object o); //向磁盘写入对象
readObject(); //读取磁盘的对象,注意这里需要强制类型
对象输入输出流的使用注意点:
1.如果想将一个对象写入到磁盘中,那么对象所属的类必须要进行序列化,实现Serializable 接口,Serializable接口没有任何方法 ,是一个标记接口
2.如果对象所属的类的成员变量发生改变,你在读取原来的对象是就会报错,如果想要解决报错,保证serialVersionUID是唯一。
3.如果你不想将某些信息存入到磁盘 就可以同过transient关键字修饰成员变量
4.如果一个类中引用了另外的一个类,那么另外的这个类也要实现Serializable接口。
如果: