android学习笔记3 - 序列化接口Parcelable、Serializable的使用与区别
来源:互联网 发布:电缆计算软件app 编辑:程序博客网 时间:2024/05/17 01:45
两个接口的作用:
实现Parcelable就是为了进行序列化,android特有,高效:
1.永久性保存对象,保存对象的字节序列到本地文件中;
2.通过序列化对象在网络中传递对象;
3.通过序列化在进程间传递对象。
同样,实现Serializable也是为了序列化,属于java特有,兼容性高:
1.可以提供一系列保存对象状态的方法网络发送;
2.文件储存对象状态;
3.管道发送对象给其他应用程序。
两者功能一致,对象,数组,线性表均可传输,但实现方式上有所区别。
Parcelable的实现:
1.首先需要传输类实现这个接口,Parcel就是一个存放读取数据的容器,利用这个容器进行操作。Parcel机制:本质上把它当成一个Serialize就可以了。只是Parcel的对象实在内存中完成的序列化和反序列化,利用的是连续的内存空间,因此更加高效。
2.重写public void writeToParcel(Parcel dest, int flags)方法,其中dest.write()方法用于写入数据,其中对象使用
方法dest.writeParcelable()进行传递,传递的对象必须实现Parcelable的接口。
3.在构造函数中增加顺序读取的方法,注意必须于写入程序相对应。
4.实例化静态内部对象CREATOR实现接口Parcelable.Creator
以下是整个类的定义:
package com.example.parcelableserializable;import java.util.ArrayList;import java.util.Arrays;import java.util.List;import android.os.Parcel;import android.os.Parcelable;public class MyParcelable implements Parcelable{private int integer1,integer2; //注意这个序列顺序private String string;private DataB objectb=new DataB();private DataA objecta=new DataA();private List<DataA> arraylist=new ArrayList<DataA>();public MyParcelable(){}public MyParcelable(Parcel parcle) //构造函数中进行数据读取,注意序列化{integer1=parcle.readInt();string=parcle.readString();integer2=parcle.readInt();ClassLoader loader1=DataB.class.getClassLoader(); objectb=parcle.readParcelable(loader1); //参数是类的加载器ClassLoader loader2=DataA.class.getClassLoader(); objecta=(DataA) parcle.readValue(loader2); //对象是object,需要进行类型强制转换//获取数组的值Parcelable[] myparcel=parcle.readParcelableArray(loader2);DataA[] a=new DataA[myparcel.length];List<Parcelable> par=Arrays.asList(myparcel);DataA[] dataa=par.toArray(a);arraylist=Arrays.asList(dataa);}@Overridepublic int describeContents() //内容描述,不用管{return 0;}@Overridepublic void writeToParcel(Parcel dest, int flags) //关键的数据传递,写入接口打包{dest.writeInt(integer1);dest.writeString(string);dest.writeInt(integer2);dest.writeParcelable(objectb, flags);dest.writeValue(objecta);DataA[] a=new DataA[arraylist.size()]; dest.writeParcelableArray(arraylist.toArray(a),flags); //将按a类型对arraylist进行类型转换。} //实例化静态内部对象CREATOR实现接口Parcelable.Creatorpublic 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]; } }; public void setinteger1(int inta) { integer1=inta; } public int getinteger1() { return integer1; } public void setinteger2(int inta) { integer2=inta; } public int getinteger2() { return integer2; } public void setString(String stringa) { string=stringa; } public String getstring() { return string; } public void setDataA(DataA data) { objecta=data; } public DataA getDataA() { return objecta; } public void setDataB(DataB data) { objectb=data; } public DataB getDataB() { return objectb; } public void setarraylist(List array) { arraylist=array; } public List getarraylist() { return arraylist; }}
MainActivity调用方法:
private MyParcelable mypar=new MyParcelable();Intent intent=new Intent();intent.setClass(this,TestActivity01.class);intent.putExtra("mypar",mypar);在TestActivity01中调用获取:
mypar=(MyParcelable) this.getIntent().getExtras().get("mypar");
Serializable的实现:
这只是给对象打了一个标记,系统会自动将其序列化,作用是将数据对象存入字节流当中,在需要时重新生成对象
import java.io.Serializable;public class MySerializable implements Serializable {private static final long serialVersionUID = 1L; //序列idprivate int data;private String string;public MySerializable(){}public void setdata(int data){this.data=data;}public int getdata(){return data;}public void setstring(String string){this.string=string;}public String getstring(){return string;}}
调用方式与Parcelable基本一致:
private MySerializable myser=new MySerializable();Intent intent=new Intent();intent.setClass(this,TestActivity01.class);intent.putExtra("myser",myser);
TestActivity01中调用
myser=(MySerializable) this.getIntent().getExtras().get("myser");
0 0
- android学习笔记3 - 序列化接口Parcelable、Serializable的使用与区别
- Android使用序列化接口Parcelable、Serializable
- Android使用序列化接口Parcelable、Serializable
- Android使用序列化接口Parcelable、Serializable
- [Android] Android使用序列化接口Parcelable、Serializable
- [Android] Android使用序列化接口Parcelable、Serializable
- android序列化 Parcelable和Serializable接口
- Android 实现序列化:Parcelable和Serializable接口的用法
- Android -- 序列化Parcelable与Serializable区别及用法
- Android - Parcelable接口用法 和 与 Serializable 的区别
- Android序列化Serializable和Parcelable区别
- Android中Serializable和Parcelable序列化的区别
- Android学习笔记之Serializable和Parcelable的区别
- Android学习-Serializable、Parcelable序列化
- Android序列化 Serializable与Parcelable
- android (序列化) serializable 与 Parcelable
- Android中序列化的Parcelable与Serializable区别及其AS插件
- 序列化Serializable和Parcelable的区别
- qemu-guest-agent各版本功能演进
- linux下打开关闭数据包转发
- bootstrap button按钮长度
- 工厂模式
- 代码检查
- android学习笔记3 - 序列化接口Parcelable、Serializable的使用与区别
- JAVA正则表达式
- 每日五题(struts2)
- iOS开发 - 数据归档与恢复 NSKeyedArchiver
- UML——用例图
- ESP EBP等寄存器简介
- Lucas大组合数模板
- hdu 2837 Calculation【欧拉函数,快速幂求指数循环节】
- 九度oj-1135-字符串排序