Android中的序列化和反序列化
来源:互联网 发布:嵌入式单片机 编辑:程序博客网 时间:2024/05/16 13:52
序列化是将对象的状态信息转换为字节序列,实现对象可以存储或传输的过程。在序列化期间,对象将其当前状态写入到临时或持久性存储区。
反序列化是将字节序列恢复为对象,可以通过从存储区中读取或反序列化对象的状态,重新创建该对象。
Android中两种序列化的方法
Serializable:这是一个Java(java.io.Serializable)的为对象提供标准的序列化和反序列化的接口。使用方式就是在类上面直接implements这个接口就行了。
反序列化是将字节序列恢复为对象,可以通过从存储区中读取或反序列化对象的状态,重新创建该对象。
Android中两种序列化的方法
Serializable:这是一个Java(java.io.Serializable)的为对象提供标准的序列化和反序列化的接口。使用方式就是在类上面直接implements这个接口就行了。
在使用Serializable的时候最好加上SerialiVersionUID(序列化 版本号),当然不加的话也能正常实现序列化,但是可能会对反序列化有影响。
有什么影响?
序列化时,会把serialVersionUID写入序列化文件,如果没有显式的指定,那么编译器就会自动根据这个类进行生成一个,反序列化的时候就会检测文件中的serialVersionUID,如果和当前类的serialVersionUID不同,那么就反序列化失败。如果我们在类中增加或者减少字段了,那么自动生成的serialVersionUID肯定会不同,所以会反序列化失败。所以,为了以后扩展,最好显式的指定serialVersionUID。
在Androidstudio中生成serialVersionUID:
File–>Settings–>Editor–>Inspections–>Java–>Serialization issues–>Serializable class without ‘serialVersionUID’
或者直接Alt+Enter提示加入。
注意:
对象序列化保存的是对象的成员变量。所以对象序列化不会序列化类中的静态变量。静态变量属于类,不属于对象。
另外被transient关键字修饰的变量也不会参与序列化。
Parcelable:
android.os.Parcelable是Android提供的序列化接口,使用比Serializable稍显复杂。类实现了Parcelable接口后
还有几个默认的方法。
describeContents():返回当前对象的内容描述。返回值0或1。默认0。
newArray(int size): 原始对象数组。
createFromParcel(Parcel in):创建原始对象。
writeToParcel(Paprcel dest,int flags):将当前对象写入序列化结构。
对比:
Serializable是Java的接口使用时需要大量I/O操作,开销大。常用于持久化对象到本地,网络传输。Parcelable效率高,使用麻烦。常用于内存级别的序列化,比如不同组件程序间的传输。
程序示例:
序列化
try { ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("Test.txt")); out.writeObject(new Person()); out.close(); } catch (IOException e) { e.printStackTrace(); }反序列化:
try { ObjectInputStream in = new ObjectInputStream(new FileInputStream("Test.txt")); Person p = (Person)in.readObject(); in.close(); } catch (IOException e) { e.printStackTrace(); }
阅读全文
0 0
- Android中的序列化和反序列化
- android中的序列化和反序列化
- Android 序列化和反序列化
- Android 序列化和反序列化
- 序列和反序列化
- 序列和反序列化
- .net中的序列化和反序列化
- .net中的序列化和反序列化
- C#中的快速序列化和反序列化对象
- java中的序列化和反序列化
- c#中的Json的序列化和反序列化
- Javascript中的Json序列化和反序列化
- C#中的Json的序列化和反序列化
- JAVA中的序列化和反序列化
- 谈谈:.Net中的序列化和反序列化
- 谈谈:.Net中的序列化和反序列化
- C#中的序列化和反序列化
- 谈谈:.Net中的序列化和反序列化
- 在laravel5.4中使用Auth系统,配置邮箱
- 复杂类型的属性注入
- 分类算法之决策树CART算法
- CentOS恢复系统启动grub1.5,2阶段
- 层叠顺序(stacking level)与堆栈上下文(stacking context)
- Android中的序列化和反序列化
- 2017-8-21-既第一篇csdn博客文章
- mysql函数大全,特别详细
- Spring Cloud
- 利用SSM(springmvc+spring+mybatis)实现多表联合查询
- 【总结】办公&编程&学习你可能需要这些小利器!
- 剑指offer:不用加减乘除做加法
- python爬虫——获取新闻标题
- 全文搜索引擎 Elasticsearch 入门