Serializable和Pacelable接口可以完成对象的序列化过程,当我们需要通过Intent和Binder传输数据时就需要使用Parcelable或者Serializable。

Serializable接口                                                                                                                               Serializable是Java所提供的一个序列化的接口,它是一个空接口,为对象提供标准的序列化和反序列化操作。

public class Person implements Serializable {
private static final long serialVersionUID = 11347198374914134L; private String name;
private int age; public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public int getAge() {
return age;
} public void setAge(int age) {
this.age = age;
}
}

想要让一个类实现序列化,只需要这个类实现Serializable接口并声明一个serialVersionUID即可。实际上,这个serialVersionUID也不是必须的,但是不声明会产生影响。serialVersionUID是用来辅助序列化的,原则上序列化后数据中的serialVersionUID只有和当前类的serialVersionUID相同才能够正常的被反序列化。serialVersionUID的详细工作机制是这样的:序列化的时候系统会把当前类的serialVersionUID写入序列化的文件中,当反序列化的时候系统会去检测文件中的serialVersionUID,看它是否和当前类的serialVersionUID一致,一致说明序列化的类和当前类的版本相同,可以成功反序列化,否则说明当前类发生了改变,这个时候就无法正常序列化。当我们没有手动指定serialVersionUID的值时系统会自动生成,当类结构发生改变,系统会重新计算当前类的serialVersionUID值。这时就可能出现反序列化失败的情况,所以我们应尽量手动指定serialVersionUID值。

Parcelable接口

Pracelable是android中的序列化方式,因此更适合用在android平台上。缺点是使用起来较为麻烦,不仅需要声明,还需要实现其内部方法。但是它的效率很高。

 public class Book implements Parcelable {

     private String name;
private String color; public Book(String name, String color){
this.name = name;
this.color = color;
} public String getColor() {
return color;
} public void setColor(String color) {
this.color = color;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} protected Book(Parcel in) {
color = in.readString();
name = in.readString();
} @Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(color);
dest.writeString(name);
} 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;
}
}

使用serializable和parcelable传递数据

//使用serializable传递数据
findViewById(R.id.btn_serializable).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(MainActivity.this, SecondActivity.class);
//传递方式一
intent.putExtra("put_person", person);
//传递方式二
Bundle bundle = new Bundle();
bundle.putSerializable("bundle_person", person);
intent.putExtras(bundle);
startActivity(intent);
}
}); //使用parcelable传递数据
findViewById(R.id.btn_parcelable).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(MainActivity.this, ThirdActivity.class); Book book = new Book("abc","yellow"); // intent.putExtra("book", book);
Bundle bundle = new Bundle();
bundle.putParcelable("book",book);
intent.putExtras(bundle);
startActivity(intent);
}
});
public class SecondActivity extends AppCompatActivity {

    @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second); TextView tv_content = (TextView) findViewById(R.id.tv_content); Intent intent = getIntent();
//Person person = (Person) intent.getSerializableExtra("put_person");
Person person = (Person) intent.getSerializableExtra("bundle_person");
tv_content.setText("name:" + person.getName() + " age:" + person.getAge());
}
}
public class ThirdActivity extends AppCompatActivity {

    @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_third); TextView tv_content = (TextView) findViewById(R.id.tv_content); Intent intent = getIntent();
Book book = intent.getParcelableExtra("book"); tv_content.setText("name:" + book.getName() + " coloe:" + book.getColor());
}
}

Serializable和Parcelable的简单介绍的更多相关文章

  1. Intent的作用和表现形式简单介绍

    Intent的作用和表现形式简单介绍 1.描写叙述:Intent负责相应用中一次操作的动作,动作涉及的数据,附加数据进行描写叙述.系统或者应用依据此Intent的描写叙述,负责找到相应的组件,将Int ...

  2. Serializable 和Parcelable 详解

    序列化:为了保存在内存中的各种对象的状态,并可以把保存的对象的状态读出来 安卓中实现序列化的接口有两个,一个是serializable,一个是parcelable. 一.实现序列化: 1.是可以将对象 ...

  3. Android序列化之Serializable和Parcelable

    PS:还有几天就开学了.先来一发. 学习内容: 1.序列化的目的 2.Android中序列化的两种方式 3.Parcelable与Serializable的性能比较 4.Android中如何使用Par ...

  4. Serializable 和 Parcelable 区别

    http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2015/0204/2410.html http://www.cnblogs.com/blu ...

  5. 浅谈Android中Serializable和Parcelable使用区别

    版权声明:本文出自汪磊的博客,转载请务必注明出处. 一.概述 Android开发的时候,我们时长遇到传递对象的需求,但是我们无法将对象的引用传给Activity或者Fragment,我们需要将这些对象 ...

  6. MySQL存储引擎简单介绍

    MySQL使用的是插件式存储引擎. 主要包含存储引擎有:MyISAM,Innodb,NDB Cluster,Maria.Falcon,Memory,Archive.Merge.Federated. 当 ...

  7. 序列化Serializable和Parcelable

    版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 简单记录下序列化Serializable和Parcelable的使用方法. Android中Intent如果要传递类对象,可以通过两 ...

  8. Android中Serializable和Parcelable序列化对象详解

    学习内容: 1.序列化的目的 2.Android中序列化的两种方式 3.Parcelable与Serializable的性能比较 4.Android中如何使用Parcelable进行序列化操作 5.P ...

  9. java中String、StringBuffer和StringBuilder的区别(简单介绍)

    简单介绍 java中用于处理字符串常用的有三个类: 1.java.lang.String 2.java.lang.StringBuffer 3.java.lang.StrungBuilder 三者共同 ...

随机推荐

  1. Codeforces 263A. Appleman and Easy Task

    A. Appleman and Easy Task time limit per test  1 second memory limit per test  256 megabytes input  ...

  2. 51. spring boot属性文件之多环境配置【从零开始学Spring Boot】

    原本这个章节是要介绍<log4j多环境不同日志级别的控制的>但是没有这篇文章做基础的话,学习起来还是有点难度的,所以我们先一起了解下spring boot属性文件之多环境配置,当然文章中也 ...

  3. [K/3Cloud]K3Cloud平台开发之Python插件

    有时候我们的表单可能很简单,只是一个简单交互的表单,但有可能还是要劳师动众的给它建个工程写个插件,是不是很不爽?例如我有如下一个表单: 功能很简单就是选个业务对象,收集绑定几个字段名,然后确定返回一个 ...

  4. 旅游电车(cogs 1175)

    [问题描述] Henryy国正致力于首都的一个旅游电车建设工程.首都有N个旅游景区.Henryy国的电车永远只沿道路规定的方向行驶,为了不使投入使用的电车有可能无法回到它的起始站,Henryy希望知道 ...

  5. 食物链 2001年NOI全国竞赛

    时间限制: 3 s 空间限制: 64000 KB 题目等级 : 钻石 Diamond   题目描述 Description 动物王国中有三类动物 A,B,C,这三类动物的食物链构成了有趣的环形.A吃B ...

  6. cogs——1786. 韩信点兵

    1786. 韩信点兵 ★★★   输入文件:HanXin.in   输出文件:HanXin.out   简单对比 时间限制:1 s   内存限制:256 MB [题目描述] 韩信是中国军事思想“谋战” ...

  7. 两张图让git新手在项目中运用git命令行

    创建分支命令:    git branch (branchname) 切换分支命令:      git checkout (branchname) 当你切换分支的时候,Git 会用该分支的最后提交的快 ...

  8. Java字符编码的转化问题

    概述: 我想字符串的编码问题的确会困扰到非常多开发人员.我近期也是被困扰到了. 问题是这种,我们通过二维码扫描来获得二维码中的信息.可是.我们的二维码的产生过程却是"多样化"的.即 ...

  9. 【c++】简单的string类的几个基本函数

    // string的几个基本函数的实现 #include <iostream> #include <assert.h> #include <string.h> us ...

  10. mac 下安装caffe(一)

    1.brew install --build-from-source -vd boost boost-python 这一步出错:libtool: unrecognized option `-stati ...