java中的对象流[53]

文章目录

  • java中的对象流[53]
  • 一、对象流概述
  • 二、代码演示
  • 1.实体类
  • 2.对象字节输入流
  • 3.对象字节输出流
  • 三.小结

一、对象流概述

对象流:
1.ObjectOutputStream:将java对象的基本数据类型和图形写入OutputStream字节输出流;
2.ObjectInputStream:对以前使用ObjectOutputStream写入的基本数据和对象进行反序列化

序列化一组对象:把对象写入到输出流中,用来存储或传输,同时序列化多个对象时,反序列化也必须按顺序操作,可使用对象数组的形式,因为对象数组可向object进行转型;

序列化就是将对象写入文件,实际写入的是类名,属性名,属性类型,属性值等;
反序列化:就是从输入流中读取对象;从文件中把对象读取出来,还原成对象;

如果一个类创建的对象,需要序列化,那么该类必须实现Serializable接口,该接口没有定义,是标记接口,告诉jvm虚拟机该对象可别序列化;

关键字:transient:声明一个实例变量,当对象被序列化存储时,它的值不需要被保存.

什么时候需要序列化对象?
1.把对象保存到文件中(存储到物理介质);
2.对象要在网络上传输;

二、代码演示

1.实体类

class Dog implements Serializable {
  	private String name;
     private int age;
     private transient int id;//序列化时该值会被忽略
     public Dog(String n,int a,int i){
         this.name=n;
         this.age=a;
         this.id=i;
     }

     public int getId() {
         return id;
     }

     public void setId(int id) {
         this.id = id;
     }

     @Override
     public String toString() {
         return "Dog{" +
                 "name='" + name + '\'' +
                 ", age=" + age +
                 ", id=" + id +
                 '}';
     }

     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;
     }
 }

2.对象字节输入流

private static void InObj(){
   File file=new File("D:/files/Dog.txt");
    //创建一个空的对象数组
    Dog[] dogs=null;
    try {
        //字节输入流
        InputStream is=new FileInputStream(file);
        //对象字节输入流
        ObjectInputStream ois=new ObjectInputStream(is);
        //使用对象数组接收对象字节输入流的内容
        dogs=(Dog[]) ois.readObject();
        ois.close();
        System.out.println(Arrays.toString(dogs));
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    } catch (ClassNotFoundException e) {
        e.printStackTrace();
    }
}

3.对象字节输出流

private static void OutObj(){
   //指定输出文件,没有则默认创建
    File file=new File("D:/files/Dog.txt");
    //创建一个对象数组
    Dog[] dogs={new Dog("111",2,1),new Dog("222",3,2),new Dog("333",4,3)};
    Dog[] dogs2={new Dog("佳佳2",2,1),new Dog("贝贝2",3,2),new Dog("艳艳2",4,3)};

    try {
        //字节输出流
        OutputStream opp=new FileOutputStream(file,true);
        //对象字节输出流
        ObjectOutputStream oos=new ObjectOutputStream(opp);
        //对象字节输出内容到文件
        oos.writeObject(dogs2);
        oos.writeObject(dogs);
        //关闭对象输出流
        oos.close();
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
}


三.小结

本章概述并演示了java中的对象流,在之后处理对象类型数据时,就可以使用对象流来写入读取数据.