IO流序列化

一、

* java中的序列化
* 值得对象的IO流  ObjectInputStream / ObjectOutputStream
* 序列化 - 将对象写出IO流 - ObjectOutputStream
* 反序列化 - 从IO流读取对象 - ObjectInputStream
* 序列话机制:可以是对象脱离程序的运行而独立存在/
*
* 使用场景 : 所有可以在网络上传输的对象, 必须都是可序列化的
* 所有需要保存在磁盘的对象 , 也必须都可以序列化的
* java中已存在的类基本上都是可序列化的
* 如何让自定义的类实现序列化 - 需要实现一个序列化标记接口
* Serializable - 序列化接口 - 实现此接口可以被序列化

 public static void main(String[] args) throws IOException, ClassNotFoundException {
        TestObject t1 = new TestObject("zhansan", 13);
        System.out.println(t1);

        TestObject t2 = new TestObject(new Student());
        //将对象序列化到磁盘文件
        ObjectOutputStream oss = new ObjectOutputStream(new FileOutputStream("C:\\Users\\lvjinjian\\Desktop\\12.txt"));
        System.out.println("写入完毕");
        oss.writeObject(t1);//写出对象
        //oss.writeObject(t2);//实例化自定义的类

        //NotSerializableException   对象没有序列化异常
        /**
         * 当要序列化的对象,参数或返回值类型对应的类, 没有实现序列化接口时 就会抛出异常
         *
         * 写出是 字节码 文件
         */
        ObjectInputStream ois = new ObjectInputStream(new FileInputStream("C:\\Users\\lvjinjian\\Desktop\\12.txt"));
       //ois.readObject()返回的是Object类型的 所以用Object接收
        Object o=ois.readObject();//抛出类找不到异常  ClassNotFoundException
        TestObject t3 =(TestObject) o;//向下转型
        System.out.println("读取完毕");
        System.out.println(t3);
        oss.close();
        ois.close();
    }
}
//对象写出流测试
class TestObject implements Serializable {
    private String name;
    private  int age;
    private  Student sud;//没有实例化时不会报错
    public TestObject(String name, int age) {
        this.name = name;
        this.age = age;
    }
    //给Student单独创建构造方法   实例化
    public TestObject(Student sud) {
        this.sud = sud;
    }

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

    @Override
    public String toString() {
        return "TestObject{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}
class Student{

}

创建一个写出序列化——new ObjectOutputStream (FileOutpurStream file);
ObjectOutputStream oss = new ObjectOutputStream(new  FileOutputStream                                                                                                             ("C:\\Users\\lvjinjian\\Desktop\\12.txt"));

oss.wrietObject (对象名);——这个对象必须实现 Serializable 接口,否则无法序列化

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值