【JAVA开发之IO流1-5】IO流之Object流与序列化对象存储

开发过程中经常需要将自己定义的类的对象存储到本地,再从本地读取,或者网络传输。

这就需要用到序列化接口、Object流,(Object类是所有类的直接父类,即所有类都是Object)
序列化接口就是Serializable接口,实现这个接口之后,才可以用Object流将类的对象序列化的存储到本地。
请看下面一段代码,定义一个Student类,实现序列化,并new出一个对象,用构造方法对变量进行赋值操作,再储存到本地,在读取到另一个对象中,然后用toString方法打印到屏幕上。
这段代码用了标准的开发编码规范,封装了成员变量。
import java.io.*;
/**
 * 定义一个Student类,并实现Serializable接口,
 * 实现了这个接口,这个类就可以序列化的储存到文件中,
 * 这个类中封装了3个变量,分别为 姓名、学号、成绩
 * 并提供了get set方法
 * */
class Student implements Serializable{
    private String name=null;
    private int num=0;
    private double fenshu=0;
    public Student(String name,int num,double fenshu){
        this.name=name;
        this.num=num;
        this.fenshu=fenshu;
    }
    /**
     * 重写了toString方法,可以直接输出一句话
     * */
    @Override
    public String toString(){
        String str="这个学生是"+getName()+",学号是"+getNum()+",分数是:"+getFenshu()+"分";
        return str;
    }

    public double getFenshu() {
        return fenshu;
    }

    public void setFenshu(double fenshu) {
        this.fenshu = fenshu;
    }

    public String getName() {
        return name;
    }

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

    public int getNum() {
        return num;
    }

    public void setNum(int num) {
        this.num = num;
    }

}
public class MyObjectStream {
    static public void main(String[] args){
        //定义一个stu对象,存储到文件中,并读取到stu2中。
        Student stu=new Student("王皓城",15101704,82);
        Student stu2=null;
        //准备存储这个Object,在外面声明2个流
        ObjectOutputStream objOutStream=null;
        ObjectInputStream objInStream=null;
        try {
            //实例化上面声明的两个流,并传入匿名文件流指定位置。
            objOutStream=new ObjectOutputStream(new FileOutputStream("D:\\1234.txt"));
            objOutStream.writeObject(stu);
            //已经存储到1234.txt中,下面用输入流读取。
            objInStream=new ObjectInputStream(new FileInputStream("D:\\1234.txt"));
            stu2= (Student) objInStream.readObject();
            //已经读取到这个Student类,并打印到屏幕。
            System.out.println(stu2);

        } catch (IOException e) {
            System.out.println("读取或写入文件时异常!");
        } catch (ClassNotFoundException e) {
            System.out.println("读取到的文件里面不含类的对象");
        } finally {
            //最后关闭流,关闭程序
            try {
                objOutStream.close();
                objInStream.close();
                System.exit(-1);
            } catch (IOException e) {
                System.exit(-1);
            }
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值