Android序列化(1)Serializable

概念说到Java,万物皆对象。对象,是一个比较抽象的概念,他就是类存活在内存中的一个实例,有状态和行为,一旦JVM停止运行,对象的状态也会随之丢失。那么如何将这个对象当前状态进行一个记录,使其可以进行存储和传输呢?这就要用到序列化了。序列化(Serialization)把对象转换为字节序列的过程称为对象的序列化,把对象的状态保持下来,写入到磁盘或者其他介质中。在此过程中,先将对象的公共字段和私有字段以及类的名称(包括类所在的程序集)转换为字节流,然后再把字节流写入数据流。在随后对对象进行反序列
摘要由CSDN通过智能技术生成

概念

说到Java,万物皆对象。对象,是一个比较抽象的概念,他就是类存活在内存中的一个实例,有状态和行为,一旦JVM停止运行,对象的状态也会随之丢失。那么如何将这个对象当前状态进行一个记录,使其可以进行存储和传输呢?这就要用到序列化了。

  • 序列化(Serialization)
    把对象转换为字节序列的过程称为对象的序列化,把对象的状态保持下来,写入到磁盘或者其他介质中。在此过程中,先将对象的公共字段和私有字段以及类的名称(包括类所在的程序集)转换为字节流,然后再把字节流写入数据流。在随后对对象进行反序列化时,将创建出与原对象完全相同的副本。

  • 反序列化(Deserialize)
    把字节序列恢复为对象的过程称为对象的反序列化,把已存在在磁盘或者其他介质中的对象,读取到内存中,以便后续操作。

Java 对象序列化是 JDK 1.1 中引入的一组开创性特性之一,用于作为一种将 Java 对象的状态转换为字节数组,以便存储或传输的机制,以后,仍可以将字节数组转换回 Java 对象原有的状态。

实际上,序列化的思想是 “冻结” 对象状态,传输对象状态(写到磁盘、通过网络传输等等),然后 “解冻” 状态,重新获得可用的 Java 对象。所有这些事情的发生有点像是魔术,这要归功于 ObjectInputStreamObjectOutputStream 类、完全保真的元数据以及程序员愿意用 Serializable 标识接口标记他们的类,从而 “参与” 这个过程。

Android序列化

Android 序列化有两种方式,实现 SerializableParcelable。今天先搞懂 Java 中自带的序列化方式 Serializable

Serializablejava.io 包中定义的、用于实现 Java 类的序列化操作而提供的一个语义级别的空接口,代码里面除了注释几乎啥也没有,仅仅是个接口:

package java.io;

// Android-added: Notes about serialVersionUID, using serialization judiciously, JSON.
/**
 * // 此处省略150行注释...
 *
 * @author  unascribed
 * @see java.io.ObjectOutputStream
 * @see java.io.ObjectInputStream
 * @see java.io.ObjectOutput
 * @see java.io.ObjectInput
 * @see java.io.Externalizable
 * @since   JDK1.1
 */
public interface Serializable {
   
}

既然啥都没有,实现序列化和反序列化为什么要实现 Serializable 接口?

在Java中实现了 Serializable 接口后,JVM 会在底层帮我们实现序列化和反序列化,如果我们不实现Serializable接口,那自己去写一套序列化和反序列化代码也行,至于具体怎么写,Google一下你就知道了。

只要我们实现 Serializable 接口,那么这个类就可以被 ObjectOutputStream 转换为字节流,也就是进行了序列化。那么就来走一把,创建个简单的学生对象,有年龄、姓名和地址等属性。

public class Student implements Serializable {
   
    //private static final long serialVersionUID = 1L;

    private static String FLAG = "9527";// 静态属性
    private int age;
    private String name;
    private String address;
    transient private String car;// 忽略序列化
    //private String addTip;

    public int getAge() {
   
        return age;
    }

    public void setAge(int age) {
   
        this.age = age;
    }

    public String getName() {
   
        return name;
    }

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

    public String getAddress() {
   
        return address;
    }

    public void setAddress(String address) {
   
        this.address = address;
    }

    public String getCar() {
   
        return car;
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小山研磨代码

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值