美文网首页
Java序列化

Java序列化

作者: Dalvik_ | 来源:发表于2021-08-17 21:21 被阅读0次

1.java序列化与反序列化的概念

  • 序列化
    将数据结构或者对象转化为二进制的过程
  • 反序列化
    将在序列化过程中生成的二进制转化为数据结构或者对象的过程
  • 持久化
    把数据结构或者对象存储起来 比如:硬盘

序列化方案:
1.Serializable Java的序列化方案
2.Parcelable Android独有
3.json xml protbuf ... 广义的序列化

2.Serializable接口及使用实例

1.Serializable是一个接口

public interface Serializable { 

} 
  • Serializable序列化
 /**
     * 序列化对象 ** @param obj * @param path * @return
     */
    synchronized public static boolean saveObject(Object obj, String path) {
        if (obj == null) {
            return false;
        }
        ObjectOutputStream oos = null;
        try {
            // 创建序列化流对象 
            oos = new ObjectOutputStream(new FileOutputStream(path));
            //序列化
            oos.writeObject(obj);
            oos.close();
            return true;
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (oos != null) {
                try {
                    // 释放资源
                    oos.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        return false;
    }
  • Serializable反序列化
 synchronized public static <T> T readObject(String path) {
        ObjectInputStream ojs = null;
        try {
            // 创建反序列化对象 
            ojs = new ObjectInputStream(new FileInputStream(path));
            // 还原对象
            return (T) ojs.readObject();
        } catch (IOException | ClassNotFoundException e) {
            e.printStackTrace();
        } finally {
            if (ojs != null) {
                try {// 释放资源
                    ojs.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        return null;
    }

2.Externalizable 是Serializable的一个子类

public interface Externalizable extends Serializable { 
    void writeExternal(ObjectOutput var1) throws IOException; 
    void readExternal(ObjectInput var1) throws IOException, 
}

3.序列化面试常见问题

  1. 什么是SerialVersionUID?如果不定义这个,会发生什么?
    序列化对象的版本号
    如果修改序列化对象的数据,可能会导致异常
    2.序列化时,如何不序列化某些变量不序列化
    transient 关键字
    3.如果对象没有实现Serializable接口,去序列化会出现什么情况?
    会报错 NoSerializableException

4.序列化源码流程解析


序列化流程 判断对象中是否写了readObject和writeObject

5.android的Parcelable相关概念

Binder通信机制

6.Parcelable与Serializable的性能比较

  • Serializable性能分析
    Serializable是Java中的序列化接口,其使用起来简单但开销较大(因为Serializable在序列化过程中使
    用了反射机制,故而会产生大量的临时变量,从而导致频繁的GC),并且在读写数据过程中,它是通
    过IO流的形式将数据写入到硬盘或者传输到网络上。
  • Parcelable性能分析
    Parcelable则是以IBinder作为信息载体,在内存上开销比较小,因此在内存之间进行数据传递时,推荐使用Parcelable,而Parcelable对数据进行持久化或者网络传输时操作复杂,一般这个时候推荐使用


    Parcelable与Serializable比较

相关文章

  • Java-序列化-反序列化

    Thanks Java基础学习总结——Java对象的序列化和反序列化java序列化反序列化原理Java 序列化的高...

  • java序列化那些事儿

    java序列化作用 在说java序列化的作用之前,先说下什么是java序列化吧。java序列化是指把java对象转...

  • Java序列化

    Java序列化的几种方式以及序列化的作用 Java基础学习总结——Java对象的序列化和反序列化

  • Java序列化机制

    Java序列化机制 序列化和反序列化 Java序列化是Java内建的数据(对象)持久化机制,通过序列化可以将运行时...

  • Java 序列化 之 单例模式

    序列化相关文章: Java 序列化 之 Serializable Java 序列化之 Externalizable...

  • java 序列化 原理解析

    序列化相关文章: Java 序列化 之 Serializable Java 序列化之 Externalizable...

  • 认识Java序列化

    我的个人博客,认识Java序列化 引言 将 Java 对象序列化为二进制文件的 Java 序列化技术是 Java ...

  • JDK 序列化

    序列化和分序列化概念 什么是序列化和反序列化 Java序列化是指把Java对象转换为字节序列的过程,而Java反序...

  • Spark序列化

    Java序列化 有关Java对象的序列化和反序列化也算是Java基础的一部分,首先对Java序列化的机制和原理进行...

  • Serializable中为什么要设置UID

    1、什么是Java序列化与反序列化 Java序列化是指把Java对象保存为二进制字节码的过程,Java反序列化是指...

网友评论

      本文标题:Java序列化

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