JavaIO流04_对象流

对象流 ObjectInputStream和ObjectOutputStream

  • 序列化: 保存数据时,保存数据的值和数据类型
  • 反序列化: 恢复数据时,恢复数据的值和数据类型
  • 为了让某个类是可序列化的,需要让类实现以下两个接口之一:
    • Serializable //这是一个标记接口,声明性质,没有方法,推荐
    • Externalizable //该接口有方法,需要实现
ObjectOutputStream(序列化)
  • 继承变量使用ObjectOutputStream自带方法,自动实现Serializable接口write和writeInt有很大区别
  • 继承Object对象时,对象需要继承Serializable接口
  • 无法序列化static修饰的静态成员
public static void main(String[] args) throws IOException {
    //序列化后,保存文件格式,不是纯文本,而是按照他写的格式来,你可以随意后缀
    String filePath = "C:\\Users\\Laity\\Desktop\\Java全栈\\JavaIO\\Test文件\\ja.wjs";
    ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(filePath));

    oos.writeInt(100); //int -> interger(调用方法自动实现了Serializable接口)
    oos.writeChar('a');
    oos.writeUTF("方法自动实现接口");
    //保存dog对象,这里未实现接口
    oos.writeObject(new dog("wjs",12));


    oos.close();
    System.out.println("save success....");

    //dog dog = new dog("123", 12);
}
class dog implements Serializable {
    String name;
    int age;

    public dog(String name, int age) {
        this.name = name;
        this.age = age;
    }
}

ObjectOutputStream(反序列化)

  • 读取的顺序要和你保存数据(序列化)的顺序一致,否则会异常
  • getclass是获取对象的类名
public static void read() throws IOException, ClassNotFoundException {

    String filePath = "C:\\Users\\Laity\\Desktop\\Java全栈\\JavaIO\\Test文件\\ja.wjs";

    ObjectInputStream ois = new ObjectInputStream(new FileInputStream(filePath));

    System.out.println(ois.readInt());
    System.out.println(ois.readChar());
    System.out.println(ois.readUTF());
    Object obj = ois.readObject();
    System.out.println(obj.getClass());
    dog dog01 = (dog) obj;//向下实例化,转化成dog类的对象可以调用dog的对象
    System.out.println(dog01.name);

    System.out.println("\nread success...");

    ois.close();
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值