话题: 反序列化 编程语言

如何实现序列化和反序列化?

写回答
  • 邀请回答
  • 举报
  • 匿名用户
    2018.08.22

    1.序列化

    使用此方法进行序列化的对象必须实现Serializable接口,不然在进行序列化时会抛出NotSerializableException异常。
    public static byte[] toBytes(Serializable obj) throws IOException {
    try(ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
    ObjectOutputStream objectOutputStream = new ObjectOutputStream(byteArrayOutputStream);
    ){
    objectOutputStream.writeObject(obj);
    return byteArrayOutputStream.toByteArray();
    }
    }
    ObjectOutputStream的writeObject方法将对象序列化后写入一个字节流中,而这个字节流就是在初始化ObjectOutputStream对象时传入的字节流,这里使用ByteArrayOutputStream,可以获取到字节流中的字节数组。

    2.反序列化

    对应序列化,反序列化应该是将字节数组转化为对象。
    public static Serializable toObj(byte[] bytes) throws IOException, ClassNotFoundException {
    try(ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(bytes);
    ObjectInputStream objectInputStream = new ObjectInputStream(byteArrayInputStream);
    ){
    Object o = objectInputStream.readObject();
    return (Serializable) o;
    }
    }
    ByteArrayInputStream将字节数组转化为字节流。而ObjectInputStream的readObject方法将字节流转化为对象。