首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Android序列化总结

接口实现对象序列化,但是在内存操作时更倾向于实现Parcelable接口,这样会使用传输效率更高效。...接口则是android中特有的序列化接口,在某些情况下,Parcelable接口实现的序列化更为高效,关于它们的实现案例我们后续会分析,这里只要清楚知道实现序列化操作时必须实现Serializable接口或者...Parcelable接口来实现序列化操作,Parcelable的性能比Serializable好,在内存开销方面较小,所以在内存间数据传输时推荐使用Parcelable,如通过Intent在activity...其实通过Intent传递复杂类型(如自定义引用类型数据)的数据时就需要使用Parcelable对象,如下是日常应用中Intent关于Parcelable对象的一些操作方法,引用类型必须实现Parcelable...,其元素必须是实现了Parcelable接口的数据 除了以上的Intent外系统还为我们提供了其他实现Parcelable接口的类,再如Bundle、Bitmap,它们都是可以直接序列化的,因此我们可以方便地使用它们在组件间进行数据传递

81920

Parcelable与Serializable

它的核心实现都在 native 层 Parcel.cpp,Java 层 Parcel 是对其接口的封装。...中, //后续我们通过Bundle的get操作直接从该Map中获取 } 写入 Parcel 数据时,都是通过键值对的形式,key 是固定的 String 类型,所以读取时也是先通过 readString...CREATOR 字段; 从这里我们可以看出:Parcelable 中为什么要包含一个 CREATOR 的字段,并且一定要声明为 static,而且系统会缓存每个已经使用过的 Parcelable 的...一般来说,如果需要持久化存储的话,一般还是不得不选择性能更差的 Serializable 方案 虽然 Parcelable 默认不支持持久化存储,但是我们也可以通过一些取巧的方式实现,在 Parcel.java...中 marshall 接口获取 byte 数组,然后存储在文件中从而实现 Parcelable 的永久存储。

1.2K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    漫谈序列化—使用、原理、问题

    ,也就是将数据写到内核的共享内存中,然后其他进程可以从共享内存中进行读取。...而Parcelable的实现就是基于这个Parcel容器,还记得刚才的几个方法吗: writeToParcel,写入数据到Parcel容器。 new User(in),从Parcel容器读取数据。...而且Parcelable还有一个问题是兼容性,每个Android版本可能内部实现都不一样,知识用于内存中也就是传递数据的话是不影响的,但是如果持久化可能就会有问题了,低版本的数据拿到高版本可能会出现兼容性问题...正常情况下,对象在内存中进行传输确实是Parcelable比较快,但是Serializable是有缓存的概念的,有人做了一个比较有趣的实验: 当序列化一个超级大的对象图表(表示通过一个对象,拥有通过某路径能访问到其他很多的对象...),并且每个对象有10个以上属性时,并且Serializable实现了writeObject()以及readObject(),在平均每台安卓设备上,Serializable序列化速度大于Parcelable

    86320

    Android查缺补漏(IPC篇)-- 进程间通讯基础知识热身

    : “:”开头的进程属于当前应用的私有进程,其他应用的组件不能和它跑在同一进程下。...,不参与序列化过程 用transient关键字标记的成员变量不参与序列化过程 Parcelable 使用Parcelable进行序列化比Serializable要麻烦一些,需要实现Parcelable接口...Parcelable接口,其对象就可以实现序列化并可以通过Intent和Binder传递。...Parcelable中的Parcel内部包含了可序列化的数据,可以在Binder中自由传输。 序列化功能:writeToParcel实现,最终是通过Parcel中的一系列write方法完成。...是客户端和服务端进行通信的媒介,当bindService时,服务端会返回一个包含了服务端业务调用的Binder对象 AIDL中自动生成的Binder接口类的一些方法: DESCRIPTOR:Binder

    36930

    Android查缺补漏(IPC篇)-- 进程间通讯基础知识热身

    : “:”开头的进程属于当前应用的私有进程,其他应用的组件不能和它跑在同一进程下。...,不参与序列化过程 用transient关键字标记的成员变量不参与序列化过程 Parcelable 使用Parcelable进行序列化比Serializable要麻烦一些,需要实现Parcelable接口...Parcelable接口,其对象就可以实现序列化并可以通过Intent和Binder传递。...Parcelable中的Parcel内部包含了可序列化的数据,可以在Binder中自由传输。 序列化功能:writeToParcel实现,最终是通过Parcel中的一系列write方法完成。...是客户端和服务端进行通信的媒介,当bindService时,服务端会返回一个包含了服务端业务调用的Binder对象 AIDL中自动生成的Binder接口类的一些方法: DESCRIPTOR:Binder

    42220

    Android查缺补漏(IPC篇)-- 进程间通讯基础知识热身

    : “:”开头的进程属于当前应用的私有进程,其他应用的组件不能和它跑在同一进程下。...,不参与序列化过程 用transient关键字标记的成员变量不参与序列化过程 Parcelable 使用Parcelable进行序列化比Serializable要麻烦一些,需要实现Parcelable接口...Parcelable接口,其对象就可以实现序列化并可以通过Intent和Binder传递。...Parcelable中的Parcel内部包含了可序列化的数据,可以在Binder中自由传输。 序列化功能:writeToParcel实现,最终是通过Parcel中的一系列write方法完成。...是客户端和服务端进行通信的媒介,当bindService时,服务端会返回一个包含了服务端业务调用的Binder对象 AIDL中自动生成的Binder接口类的一些方法: DESCRIPTOR:Binder

    60860

    Android 进阶6:两种序列化方式 Serializable 和 Parcelable

    简单地说,“序列化”就是将运行时的对象状态转换成二进制,然后保存到流、内存或者通过网络传输给其他端。...在安卓开发中,我们在组件中传递数据时常常使用 Intent 传输数据时需要传递 Serializable 或者 Parcelable 的数据,比如 Intent.putExtra 方法: public...Parcel 是一个载体,它可以包含数据或者对象引用,然后通过 IBinder 在进程间传递。...实现 Parcelable 接口的类必须有一个 CREATOR 类型的静态变量,下面是一个实例: public class ParcelableGroupBean implements Parcelable...总结 可以看到,Serializable 的使用比较简单,创建一个版本号即可;而 Parcelable 则相对复杂一些,会有四个方法需要实现。

    1.6K50

    Android开发之漫漫长途 X——Android序列化

    该系列引用了《Android开发艺术探索》以及《深入理解Android 卷Ⅰ,Ⅱ,Ⅲ》中的相关知识,另外也借鉴了其他的优质博客,在此向各位大神表示感谢,膜拜!!!...其实不是的,同志们还记得上两篇出现的Parcel吗,Parcel是一个容器,他可以包含数据或者是对象引用,并且能够用于Binder的传输。...使用Serializable来实现序列化相当简单,只需要在需要序列化的类实现Serializable接口并在其中声明一个类似下面的标识即可自动实现默认的序列化过程。...dest.writeString(name); } } 从上述代码注释可以看出,写一个实现Parcelable接口的类还是比较麻烦的,和Serailable相比,我们需要在writeToParcel...getClass().getClassLoader() : loader); //加载我们自己实现Parcelable接口的类 Class

    37920

    Android 反序列化漏洞攻防史话

    方法,分别填充了该自定义结构序列化和反序列化的实现,当然我们也可以自己继承 Parcelable 去实现自己的可序列化数据结构。...其他 除了上面介绍的这些,Parcel 实现中还有许多值得关注的细节,比如 writeBlob 同样也是写入 byte[],但对于过大的数据会选择用共享内存的方式去进行传输。...在现实中,这种出现问题的类通常只在进程间使用而几乎不用于跨进程,否则在正常 IPC 调用时候就会出现明显的数据错误。...其他 上面只介绍了漏洞利用的大致流程,完整的利用还有一些细节需要注意,比如: 如何将任意 Parcelable 放到 Intent 中; 精细的内存布局; 对于问题 1,使用 putExtras(Bundle...如果泄露的数据来自其他进程,且数据中包含特权的 IBinder 等结构,那么还可能造成提权或者 RCE 的危害! 为此,我们首先需要找到一个 recycle 后再次使用 LazyValue 的场景。

    1.9K60

    Android进程间通信(一):基础介绍

    PC的一个程序 或者 移动设备的一个应用. 线程:CPU调用的最小单元,是一种有限的系统资源。 一个进程可以包含多个线程。...Serializable 接口,其他的工作几乎都被系统自动完成了。...Parcelable 也是一个接口,我们只要实现这个接口,然后根据AndroidStudio的提示重写对应方法。...flags包含右侧标记为的值. 1 表示 正在写入的对象是一个返回值,一些实现可能在此时释放资源. 2 表示父对象将负责管理名义上跨其内部数据成员复制的重复状态/数据. 几乎所有情况都是 0....CONTENTS_FILE_DESCRIPTOR = 0x0001 系统为我们提供了许多实现了 Parcelable 接口的类,它们都是可以直接序列化的。

    30430

    Android 序列化 Serializable与Parcelable

    中提供了Parcelable接口来实现序列化操作,Parcelable的性能比Serializable好,在内存开销方面较小,所以在内存间数据传输时推荐使用Parcelable,如通过Intent在activity...Parcelable 与 Serializable 区别 (1)两者的实现差异 Serializable的实现,只需要实现Serializable接口即可。...而Parcelabel的实现,不仅需要实现Parcelabel接口,还需要在类中添加一个静态成员变量CREATOR,这个变量需要实现 Parcelable.Creator 接口,并实现读写的抽象方法。...所以Android应用程序在内存间数据传输时推荐使用Parcelable,如activity间传输数据和AIDL数据传递。...AndroidStudio中的快捷生成方式 (1)AndroidStudio快捷生成Parcelable代码 android studio 提供了自动实现Parcelable接口的方法的插件,相当实现,

    2.1K60

    Android序列化权威面试指南,资深面试者的秘诀

    出发点: 在回答这个问题时,需要深入理解Serializable和Parcelable的实现原理及其在Android中的性能影响,以及在不同场景下的选择。...在Android中,推荐使用Parcelable来传递复杂对象,特别是在需要频繁传递对象时,Parcelable的性能更佳。...注意事项 问题: 在实现Parcelable时有哪些需要注意的地方? 出发点: 面试官希望了解面试者对实现Parcelable过程中可能遇到的问题和注意事项的掌握程度。...参考简答: 内存分配: 在实现Parcelable时需要注意内存分配,尽量避免不必要的内存开销。...数据结构的变化: 在使用Parcelable时,如果对象的数据结构发生变化,例如新增了字段或者改变了字段类型,需要手动修改Parcelable的实现,否则会导致反序列化失败。

    14910

    Android-Proguard(混淆)

    这里说一下,你只要设置了minifyEnabled true开启混淆,其他的压缩,优化,预校验就默认开启了,那我们就可以开始proguard-rules.pro 文件的编写了,如图: ?  ....** # 二颗星表示保持本包和子包下的类名(不包含内容) # 只保持本包的类名和内容 -keep class com.xzt.demotwo.*{*;} #可以保持本包和子包的类名和内容 -keep...(否则反射可能出现问题); 3,AndroidMainfest中的类不混淆,所以四大组件和Application的子类和Framework层下所有的类默认不会进行混淆。...自定义的View默认也不会被混淆;所以像网上贴的很多排除自定义View,或四大组件被混淆的规则在Android Studio中是无需加入的; 4,与服务端交互时,使用GSON、fastjson等框架解析服务端数据时...,所写的JSON对象类不混淆,否则无法将JSON解析成对应的对象; 5,使用第三方开源库或者引用其他第三方的SDK包时,如果有特别要求,也需要在混淆文件中加入对应的混淆规则; 6,有用到WebView的

    1.4K40

    Android查缺补漏(IPC篇)-- 进程间通讯基础知识热身

    : “:”开头的进程属于当前应用的私有进程,其他应用的组件不能和它跑在同一进程下。...,不参与序列化过程 用transient关键字标记的成员变量不参与序列化过程 Parcelable 使用Parcelable进行序列化比Serializable要麻烦一些,需要实现Parcelable接口...Parcelable接口,其对象就可以实现序列化并可以通过Intent和Binder传递。...Parcelable中的Parcel内部包含了可序列化的数据,可以在Binder中自由传输。 序列化功能:writeToParcel实现,最终是通过Parcel中的一系列write方法完成。...是客户端和服务端进行通信的媒介,当bindService时,服务端会返回一个包含了服务端业务调用的Binder对象 AIDL中自动生成的Binder接口类的一些方法: DESCRIPTOR:Binder

    37440

    Java数据的序列化总结

    Android开发中经常需要用到序列化,系统提供了两个接口用来实现, · Parcelable · Serializable 今天说下这两个接口在实现上有什么区别 Serializable Serializable...是Java提供的接口,用来标识某一个类可以被序列化,用起来非常简单,只需要implement这个接口,提供get/set方法就可以 Parcelable Parcelable是Android为了序列化而专门设计的接口类...实现 Parcelable的demo像以下这样, public class Girl implements Parcelable { private int mAge; // 年龄...Parcelable接口 · 实现 writeToParcel 方法 · 创建 CREATEOR,并实现 createFromParcel 和 newArray 区别 好了,说完这两个接口,来总结下这两个接口的区别...· Serializable 是Java提供的接口,本身序列化效率比 Android 的 Parcelable低 · 一般对于内存读写要求高的情况下用 Parcelable,程序间的数据传输也可以用

    23420

    Java IO之对象的序列化、ObjectInputStream和ObjectOutputStream类

    ,对象序列化并不一定都向文件中保存,也有可能面向于其他的输入或输出    2、被序列化的对象的类必须实现Serializable 接口,如果某个属性不希望被保存下来,则可以使用transient 关键字声明...,都是与系统相关的,在编程时应尽量使用。     ...前面介绍了Serializable接口,实现Serializable接口来实现对象的序列化很简单,但是性能没有Parcelable接口高。所以建议使用Parcelable 。   ...2.应用场景:    需要在多个部件(Activity或Service)之间通过Intent传递一些数据时,简单类型的可以直接放入Intent,复杂类型的必须实现Parcelable接口。   ...Parcelable接口序列化对象的步骤:    1、实现Parcelable接口。

    1.1K30

    Android Parcelable

    Paracelable是android自己的实现序列化的接口,是anroid推荐使用的.那么什么事序列化呢?...      简单来说,Parcel提供了一套机制,可以将序列化之后的数据写入到一个共享内存中,其他进程通过Parcel可以从这块共享内存中读出字节流,并反序列化成对象.而Parcel本身就是包裹的意思...但当我知道Paracelable的效率最高可以达到Serializable的10倍我就果断放弃传统方式了。并在此记录。 三:怎么做? 第一步:首先写一个User类实现Parcelable接口。...下面来说一下对象和集合的序列化。我们在之前的user类中,再添加个对象和集合,如图: ? 如果实现Parcelable接口的对象中包含对象或者集合,那么其中的对象也要实现Parcelable接口 ....,也就是我们的Author要实现Parcelable接口: ? 跟User是一样的,没啥说的。 先看添加了集合和对象已经对象集合跟之前User的构造方法中的变化: ?

    61630
    领券