【java:ObjectOutputStream对象输出流】对象序列化和反序列化

要求:

学生类:

包含私有属性 id, name,address, age;

age属性用transient修饰,不需要被序列化;

测试类1:

序列化:传入参数:1,Jack,北京,18;

利用ObjectOutputStream,把该对象序列化,写进文件,命名为:student.txt;

测试类2:

反序列化:利用 ObjectInputStream ,把序列化后得到的student.txt文件的内容反序列化,读取出来,在控制台打印输出。

Student.java学生类:

package mypackage;

import java.io.Serializable;

public class Student implements Serializable {
    //属性
    private int id;
    private String name;
    private String address;
    private transient int age;//transient瞬态属性不需要被序列化

    //无参构造方法
    public Student() {
    }
    //含全部参数构造方法

    public Student(int id, String name, String address, int age) {
        this.id = id;
        this.name = name;
        this.address = address;
        this.age = age;
    }
    //右键generate,快速构建get/set方法

    public int getId() {
        return id;
    }

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

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

Test99.java测试类:

package mypackage;

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.io.Serializable;

public class Test99 implements Serializable {
    public static void main(String[] args) {
        Student stu = new Student();
        stu.setId(1);
        stu.setName("Jack");
        stu.setAddress("北京");
        stu.setAge(18);
        ObjectOutputStream out = null;
        //创建序列化流对象
        //FileOutputStream下方有红线,选择提示,try...catch
        try {
            out = new ObjectOutputStream(new FileOutputStream("Student.txt"));
            out.writeObject(stu);
            System.out.println("该对象已经被序列化了");
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            try {
                out.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

Test100.java测试类:

package mypackage;

import java.io.FileInputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.Serializable;

public class Test100 implements Serializable {
    public static void main(String[] args) {
        ObjectInputStream ois = null;
        Student stu = null;

        try {
            ois = new ObjectInputStream(new FileInputStream("Student.txt"));
            stu = (Student)ois.readObject();
        } catch (IOException var14) {
            var14.printStackTrace();
        } catch (ClassNotFoundException var15) {
            var15.printStackTrace();
        } finally {
            try {
                ois.close();
            } catch (IOException var13) {
                var13.printStackTrace();
            }
        }
        System.out.println("id:" + stu.getId());
        System.out.println("name:" + stu.getName());
        System.out.println("address:" + stu.getAddress());
        System.out.println("age:" + stu.getAge());
    }
}

运行结果:

Test99.java,进行序列化后:(这是对象序列化以后,文件的内容,不知道可不可以显示成正常的文字,有知道的小伙伴吗?)

 Test100.java,进行反序列化后:

总结:

序列化:对象序列化的机制,用一个字节序列可以表示一个对象,将对象写入文件,相当于在文件中持久保存。

反之,该字节序列还可以从文件中读取出来,重构对象,对它进行反序列化。

ObjectInputStream    序列化      对象转换为字节

ObjectOutputStream 反序列化   字节重构为对象

作用:将java对象的数据写出到文件,实现对象的持久存储

注意:age属性用transient修饰,不需要被序列化,所以文件里面是没有age这个属性的信息的。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值