首页 技术 正文
技术 2022年11月15日
0 收藏 727 点赞 2,255 浏览 2233 个字

转载请标明出处 :https://www.cnblogs.com/tangZH/p/10998065.html 

更多精彩文章:http://77blogs.com/?p=286

Parcelable与Serializable

Serializable是Java为我们提供的一个标准化的序列化接口。

Parcelable是Android为我们提供的序列化的接口。


对比:

1、Parcelable相对于Serializable的使用相对复杂一些。

2、Parcelable的效率相对Serializable也高很多。

3、Parcelable不能使用在要将数据存储在磁盘上的情况,因为Parcelable在外界有变化的情况下不能很好的保证数据的持续性。尽管Serializable效率低点,但此时还是建议使用Serializable。存储到设备或者网络传输上选择Serializable。


序列化与反序列化

序列化:将对象转换为可以传输的二进制流(二进制序列)的过程,这样我们就可以通过序列化,转化为可以在网络传输或者保存到本地的流(序列),从而进行传输数据 。

反序列化:从二进制流(序列)转化为对象的过程。

简单使用:

进行Android开发的时候,无法将对象的引用传给Activities或者Fragments,我们需要将这些对象放到一个Intent或者Bundle里面,然后再传递。简单看一下:

1、定义Book类,实现Parcelable接口。

package com.status.mattest;import android.os.Parcel;
import android.os.Parcelable;public class Book implements Parcelable { private String name;
private int id;
private String classify; protected Book(Parcel in) {
name = in.readString();
classify = in.readString();
id = in.readInt();
} public Book(String classify, String name, int id) {
this.name = name;
this.id = id;
this.classify = classify;
} /**
* 反序列化
*/
public static final Creator<Book> CREATOR = new Creator<Book>() {
@Override
public Book createFromParcel(Parcel in) {
return new Book(in);
} @Override
public Book[] newArray(int size) {
return new Book[size];
}
}; @Override
public int describeContents() {
return 0;
} /**
* 序列化过程
*
* @param dest
* @param flags
*/
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(name);
dest.writeString(classify);
dest.writeInt(id);
} @Override
public String toString() {
return "name : " +
name + "\"" + "id : " + id + "\"" + "classify" + classify;
}
}

writeToParcel:序列化过程

Creator与protected Book(Parcel in)配合实现反序列化,转换为对象。

注意:类中有多个String或者其它相同对象的话,那么writeToParcel中writeString的顺序是怎么样的,protected Book(Parcel in) {}中readString的顺序就得是怎么样的。

2、mainActivity中:

textView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(MainActivity.this, Test1Activity.class);
intent.putExtra("key", new Book("哈", "鸿", 8));
startActivity(intent);
}
});

3、另一个Activity获取:

 Intent intent = getIntent();
Book book = intent.getParcelableExtra("key");
Log.d("Test1Activity", book.toString());

输出:

Android中Parcelable的使用


Book类里面有其它对象:

如果Book类里面有其他对象(比如实体类Data)的话,那么Data也需要实现Parcelable接口,用法与上面的Book类一样。

writeToParcel里面需要写上:dest.writeParcelable(data, 0);

protected Book(Parcel in) {}里面需要写上data = in.readParcelable(Data.class.getClassLoader());


参考:https://www.jianshu.com/p/df35baa91541

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:8,955
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,479
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,291
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,108
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,740
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,774