美文网首页
序列化与反序列化

序列化与反序列化

作者: Tinyspot | 来源:发表于2023-06-27 20:22 被阅读0次

1. 序列化

序列化一般是指把结构化的对象变成无结构的字节流,便于存储、传输
字节流,同义:二进制流、二进制数组、字节数组

Java 序列化是指把 Java 对象转换为字节序列的过程;而 Java 反序列化是指把字节序列恢复为Java 对象的过程

作用:
1.对象持久化:对象生存在内存中,把一个对象持久化到磁盘
2.远程网络通信:内存中的对象不能直接进行网络传输,发送端把对象序列化成网络可传输的字节流,接收端再把字节流还原成对象

2. Serializable 接口

  • Serializable接口是一个标记接口,不用实现任何方法。一旦实现了此接口,该类的对象就是可序列化的
  • 若类的成员属性是引用类型,则这个引用类型也必须是可序列化的,否则会导致此类不能序列化
  • transient 修饰的属性不能序列化
  • 静态成员不能序列化

2.1 可选的自定义序列化(transient )

  • transient(瞬时的)表示该属性不需要序列化

ArrayList 的 transient 可以拿到

public class ArrayList<E> extends AbstractList<E>
        implements List<E>, RandomAccess, Cloneable, java.io.Serializable {
    transient Object[] elementData;

    rivate void readObject(java.io.ObjectInputStream s)
        throws java.io.IOException, ClassNotFoundException {
      
    }

    private void writeObject(java.io.ObjectOutputStream s) throws java.io.IOException {
        s.defaultWriteObject();
        for (int i=0; i<size; i++) {
            s.writeObject(elementData[i]);
        }
    }
}

3. 序列化方式

  • 实现 Serializable 接口
  • Hessian 序列化
  • JSON 序列化
    • 轻量级数据交换格式
    • 将数据对象转换为 JSON 字符串
    • 序列化过程中抛弃了类型信息,所以反序列化时只有提供类型信息才能准确地反序列化

相关文章

网友评论

      本文标题:序列化与反序列化

      本文链接:https://www.haomeiwen.com/subject/zprwnrtx.html