浅谈项目中遇到的Serializable和Parcelable

简介: 安卓项目终于要到调用网络接口的时候了,之前了解到,需要对Java对象进行序列化操作,以json格式传入;接收的也是json并解析成Java对象。
本文首发于稀土掘金。该平台的作者 逐光而行 也是本人。

背景

安卓项目终于要到调用网络接口的时候了,之前了解到,需要对Java对象进行序列化操作,以json格式传入;接收的也是json并解析成Java对象。

之前还了解到,gson库可用来解析json串,在build.gradle里面implement一个serializable相关的插件可以使用@serializable。

但是今晚,突然发现有大佬的项目代码中,对象类

implements Parcelable

看上下代码逻辑,这个似乎就变成了可用的json格式!

于是上网查阅了相关资料,原来Parcelable也是一个序列化的接口。但两者略有不同。

两者简略对比

  • Serializable代码少一些,创建和传输数据更容易,但是比Parcelable慢。

Serializable代码示例:

import java.io.Serializable;
class serializableObject implements Serializable {
   String name;
   public serializableObject(String name) {
      this.name = name;
   }
   public String getName() {
      return name;
   }
}

Parcelable代码示例(摘自官方文档):


 public class MyParcelable implements Parcelable {
     private int mData;

     public int describeContents() {
         return 0;
     }

     public void writeToParcel(Parcel out, int flags) {
         out.writeInt(mData);
     }

     public static final Parcelable.Creator<MyParcelable> CREATOR
             = new Parcelable.Creator<MyParcelable>() {
         public MyParcelable createFromParcel(Parcel in) {
             return new MyParcelable(in);
         }

         public MyParcelable[] newArray(int size) {
             return new MyParcelable[size];
         }
     };

     private MyParcelable(Parcel in) {
         mData = in.readInt();
     }
 }
  • Serializable是Java语言本身支持的序列化方式,而Parcelable是安卓特有的。
  • Serializable偏应用层,所以存储到设备或者需要网络通信传输的时候选Serializable更好;Parcelable原理机制偏底层,所以内存序列化时比较适合使用它。
  • 同时与外界数据传输交互时不推荐使用Parcelable:因为Parcelable不太能保证数据传输的一致性(我的理解是:传回来的数据可能不是最初的数据)。

(注:虽然我并没有直接在官方文档找到这一段描述,而且很多给出出处链接的文章的链接都失效了,但是这么说的文章真的有很多篇,我暂且选择相信这个说法)

参考资料

  • 安卓官方文档
  • 各大博客文章
相关文章
|
Java 测试技术 数据库
Java的POJO类为什么要实现Serializable接口
Java的POJO类为什么要实现Serializable接口
|
存储 Java Android开发
Parcelable与Serializable
跟大家分享一下Android的序列化
89 0
|
存储 Java Android开发
Android 序列化(Serializable和Parcelable)
🔥 什么是序列化 由于存在于内存中的对象都是暂时的,无法长期驻存,为了把对象的状态保持下来,这时需要把对象写入到磁盘或者其他介质中,这个过程就叫做序列化。 🔥 为什么序列化 永久的保存对象数据(将对象数据保存在文件当中,或者是磁盘中)。 对象在网络中传递。 对象在IPC间传递。
226 0
Android 序列化(Serializable和Parcelable)
|
Java Kotlin
Kotlin 序列化Parcelable/Serializable
Kotlin 序列化Parcelable/Serializable
1073 0
|
Java Spring
【SpringDataJPA】——SpringDataJPA入门实例
  Spring经常喜欢做的事情就是封装,经过spring的封装结出的一大果实——SpringDataJPA可以很大程度上提高我们持久层的开发效率。
SpringDataJPA之PagingAndSortingRepository接口
PagingAndSortingRepository 接口继承于 CrudRepository 接口,拥有CrudRepository 接口的所有方法, 并新增两个功能:分页和排序。 但是这两个方法不能包含筛选条件。
SpringDataJPA之PagingAndSortingRepository接口
|
SQL 测试技术 API
SpringDataJPA之CrudRepository接口
上篇我们介绍了Repository接口,发现该接口并没有提供完成的DML操作,SpringDataJPA中完成的CRUD操作是通过CrudRepository接口来实现的。
SpringDataJPA之CrudRepository接口
|
SQL Java 测试技术
SpringDataJPA之Repository接口
Repository 接口是 Spring Data JPA 中为我我们提供的所有接口中的顶层接口,而且是个标志接口,Repository 提供了两种查询方式的支持
SpringDataJPA之Repository接口
|
测试技术
SpringDataJPA之JpaRepository和JpaSpecificationExecutor接口
JpaRepository 接口是我们开发时使用的最多的接口。其特点是可以帮助我们将其他接口的方法的返回值做适配处理。可以使得我们在开发时更方便的使用这些方法。
|
Android开发 Java 存储
序列化Parcelable和Serializable的区别
Parcelable和Serializable有什么用,它们有什么差别? Parcelable和Serializable都可以实现序列化,使对象可以变为二进制流在内存中传输数据。
3047 0