对象序列化,java中序列化与反序列化

对象序列化:就是将对象保存到磁盘中,或者在网络中传输对象

这种机制就是使用一个字节序列表示一个对象,该字节序列包含:对象的类型、对象的数据和对象中存 储的属性等信息

字节序列写到文件之后,相当于文件中持久保存了一个对象的信息

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

构造方法:ObjectOutputStream(OutputStream out):创建一个写入指定的OutputStream的ObjectOutputStream

序列化对象的方法:void writeObject(Object obj):将指定的对象写入ObjectOutputStream.

注意:

一个对象想要被序列化,该对象所属的类必须实现Serializable接口

Serializable是一个标记接口,实现此接口,不需要重写任何方法

例如

public class Employee implements Serializable {...}

序列化:

public static void main(String[] args) {
        try(
                ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("employee.txt"));
                ) {
            Employee employee = new Employee("Tom","市场部", 9000);
            oos.writeObject(employee);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

反序列化://结果:

public class DeSerialization {
    public static void main(String[] args) {
        try(
            ObjectInputStream ois = new ObjectInputStream(new FileInputStream("employee.txt"));
                ) {
            Object obj = ois.readObject();
            Employee employee = (Employee) obj;
            System.out.println(employee.getName() + "," + employee.getDepartment() + "," + employee.getSalary());
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }
}

注意:反序列化时,强烈建议在需要序列化的类(如上面用到的Employee类)里面加入serialVersionUID,此序列化UID是双方的暗号。

如:private static final long serialVersionUID = 32L(举例的数字);

对于不想被序列化的属性,可以加入transient关键字:private transient int salary;

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值