(JavaSE 学习记录) IO流之对象流ObjectInputStream、ObjectOutputStream

对象流

以“对象”为数据源,但是必须将传输的对象进行序列化与反序列化操作。

与数据流相比,对象流能读写对象。

重点:Serializable接口、transient关键字

import java.io.*;

public class ObjectTest {
    public static void main(String[] args) throws IOException, ClassNotFoundException {
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        ObjectOutputStream oos = new ObjectOutputStream(new BufferedOutputStream(baos));
        //序列化
        oos.writeObject("玛卡巴卡");
        oos.writeObject(new TheGarden("Makka",12));
        oos.flush();
        byte[] data = baos.toByteArray();
        ObjectInputStream ois = new ObjectInputStream(new BufferedInputStream(new ByteArrayInputStream(data)));
        //反序列化
        Object str = ois.readObject();
        Object gar = ois.readObject();

        //避免出现类型转换错误
        if (str instanceof String) {
            str = (String) str;
            System.out.println(str);
        }
        if (gar instanceof TheGarden){
            gar = (TheGarden) gar;
            System.out.println(((TheGarden) gar).getAge());
            System.out.println(((TheGarden) gar).getName());
        }
    }
}

//自己写的类需要继承serializable接口,才能序列化
class TheGarden implements Serializable{
    private String name;
    private transient int age;  
    //transient关键字表示该数据不可序列化(隐藏该数据)

    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }


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


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值