Android 序列化
来源:互联网 发布:批处理卸载软件 编辑:程序博客网 时间:2024/06/10 02:24
序列化的目的:
1、永久性保存对象,保存对象的字节序列到本地文件中
2、让对象在网络中传递
3、让对象在IPC间传递
序列化的方法:
有两种实现序列化的方法,分别实现Serializable接口和Parcelable接口。前者是Java中的序列化接口,后者是Android自带的序列化接口。Serializable在序列化的时候会产生大量的临时变量,从而引起频繁的GC,所以在使用内存时更推荐使用Parcelable。但Parcelable有一个明显的缺点是不能使用在将数据存储在磁盘上的情况。因为Parcelable本质上是为了更好的实现对象在IPC间传递,并不是一个通用的序列化机制。
代码实现:
Serializable接口的实现及运用:
Serializable的接口实现较简单,让类继承该接口即可,系统会自动将其序列化,具体代码如下
public class Book implements Serializable { private static final long serialVersionUID = 21455356667888L; private String mName; private String mPrice; public String getmName() { return mName; } public void setmName(String mName) { this.mName = mName; } public String getmPrice() { return mPrice; } public void setmPrice(String mPrice) { this.mPrice = mPrice; }}
在Activity中的使用
// serializable对象传递方法public void setSerializableMethod() { Book book = new Book(); book.setmName("王海康"); book.setmPrice("20$"); Intent intent = new Intent(this, BookTest.class); Bundle bundle = new Bundle(); bundle.putSerializable(SER_KEY, book); intent.putExtras(bundle); startActivity(intent);}// serializable对象获取方法public Book getSerializableMethod(){ Book mBook = (Book )getIntent().getSerializableExtra(SER_KEY); return mBook;}
Parcelable接口的实现和使用
1)implements Parcelable。
2)重写writeToParcel方法,将你的对象序列化为一个Parcel对象,即:将类的数据写入外部提供的Parcel中,打包需要传递的数据到Parcel容器保存,以便从Parcel容器获取数据。
3)重写describeContents方法,内容接口描述,默认返回0即可。
4)实例化静态内部对象CREATOR实现接口Parcelable.Creator 。
public class Person implements Parcelable { private String mName; private String mSex; private int mAge; public String getmName() { return mName; } public void setmName(String mName) { this.mName = mName; } public String getmSex() { return mSex; } public void setmSex(String mSex) { this.mSex = mSex; } public int getmAge() { return mAge; } public void setmAge(int mAge) { this.mAge = mAge; } @Override public int describeContents() { return 0; } @Override public void writeToParcel(Parcel dest, int flags) { dest.writeString(mName); dest.writeString(mSex); dest.writeInt(mAge); } public static final Parcelable.Creator<Person> CREATOR = new Creator<Person>() { @Override public Person createFromParcel(Parcel source) { Person person = new Person(); person.mName = source.readString(); person.mSex = source.readString(); person.mAge = source.readInt(); return person; } //供反序列化本类数组时调用的 @Override public Person[] newArray(int size) { return new Person[size]; } };
在Activity中的使用
1、传递单一对象的具体代码
// parcelable对象传递方法public void setParcelableMethod() { Person person = new Person(); person.setmName("王海康"); person.setmSex("男"); person.setmAge(45); Intent intent = new Intent(this, PersonTest.class); Bundle bundle = new Bundle(); bundle.putParcelable(PAR_KEY, person); intent.putExtras(bundle); startActivity(intent);}// parcelable对象获取方法public Person getParcelableMethod(){ Person mPerson = (Person)getIntent().getParcelableExtra(PAR_KEY); return mPerson;}
2、传递对象列表具体代码
// parcelable对象List传递方法public void setParcelableListMethod() { ArrayList<Person> personList = new ArrayList<Person>(); Person person1 = new Person(); person1.setmName("王海康"); person1.setmSex("男"); person1.setmAge(45); personList.add(person1); Person person2 = new Person(); person2.setmName("薛岳"); person2.setmSex("男"); person2.setmAge(15); personList.add(person2); Intent intent = new Intent(this, PersonTest.class); Bundle bundle = new Bundle(); bundle.putParcelableArrayList(PAR_LIST_KEY, personList); intent.putExtras(bundle); startActivity(intent);}// parcelable对象获取方法public ArrayList<Person> getParcelableMethod(){ ArrayList<Person> mPersonList = getIntent().getParcelableExtra(PAR_LIST_KEY);return mPersonList;}
注意事项:
1、对象序列化不会关注类中的静态变量
2、当某个字段被声明为transient后,默认序列化机制就会忽略改字段
参考文档:
浅谈Android序列化
这里写链接内容
这里写链接内容
0 0
- Android bitmap序列化
- Android中序列化
- Android 序列化 Parcelable
- Android中的序列化
- android的序列化
- android对象序列化
- android中的序列化
- Android 序列化
- android 传值 序列化
- android 序列化
- android 的序列化
- android 对象序列化
- android序列化Parcelable
- android序列化
- 浅谈Android序列化
- 浅谈Android序列化
- Android序列化Parcelable
- Android学习 - 序列化
- navigationBar色差解决
- 第十一周实践项目4-教师兼干部类
- Linux下GDB调试工具使用
- Java中获取文件大小的正确方法
- Android Dev Intro - Some Concepts
- Android 序列化
- Think安装redis 去除index
- iOS UICollectionView XIB
- linux下串口常用命令
- Android 二维码 生成和识别(附Demo源码)
- Linux出现Error: xz compression not available
- 不看星创客精英五四节 竟不知道五四还可以这样过
- java集合04--fail fast机制原理以及解决办法
- 针对pod抽风 莫名报缺失.h文件