java parcelablee在哪个java包中?

心有猛虎,细嗅蔷薇。
序列化Serializable和Parcelable的理解和区别
原文地址:
一、android为什么要序列化?什么是序列化,怎么进行序列化
为什么要了解序列化?—— 进行Android开发的时候,无法将对象的引用传给Activities或者Fragments,我们需要将这些对象放到一个Intent或者Bundle里面,然后再传递。
什么是序列化 —— 序列化,表示将一个对象转换成可存储或可传输的状态。序列化后的对象可以在网络上进行传输,也可以存储到本地。
怎么通过序列化传输对象?
Android中Intent如果要传递类对象,可以通过两种方式实现。
方式一:Serializable,要传递的类实现Serializable接口传递对象,
方式二:Parcelable,要传递的类实现Parcelable接口传递对象。
Serializable(Java自带):
Serializable是序列化的意思,表示将一个对象转换成可存储或可传输的状态。序列化后的对象可以在网络上进行传输,也可以存储到本地。
Parcelable(android 专用):
除了Serializable之外,使用Parcelable也可以实现相同的效果,
不过不同于将对象进行序列化,Parcelable方式的实现原理是将一个完整的对象进行分解,
而分解后的每一部分都是Intent所支持的数据类型,这样也就实现传递对象的功能了。
实现Parcelable的作用
1)永久性保存对象,保存对象的字节序列到本地文件中;
2)通过序列化对象在网络中传递对象;
3)通过序列化在进程间传递对象。
选择序列化方法的原则
1)在使用内存的时候,Parcelable比Serializable性能高,所以推荐使用Parcelable。
2)Serializable在序列化的时候会产生大量的临时变量,从而引起频繁的GC。
3)Parcelable不能使用在要将数据存储在磁盘上的情况,因为Parcelable不能很好的保证数据的持续性在外界有变化的情况下。尽管Serializable效率低点,但此时还是建议使用Serializable 。
需要在多个部件(Activity或Service)之间通过Intent传递一些数据,简单类型(如:数字、字符串)的可以直接放入Intent。复杂类型必须实现Parcelable接口。
二、利用java自带的Serializable 进行序列化的例子
弄一个实体类 Person,利用Java自带的Serializable进行序列化
package com.amqr.serializabletest.
import java.io.S
* User: LJM
* Date&Time:
* Describe: Describe Text
public class Person implements Serializable{
private static final long serialVersionUID = 8556980L;
private int
public int getAge() {
public void setAge(int age) {
this.age =
public String getName() {
public void setName(String name) {
this.name =
使用,MainActivity和SecondActivity结合使用
MainActivity
package com.amqr.
import android.app.A
import android.content.I
import android.os.B
import android.view.V
import android.widget.TextV
import com.amqr.serializabletest.entity.P
* 进行Android开发的时候,我们都知道不能将对象的引用传给Activities或者Fragments,
* 我们需要将这些对象放到一个Intent或者Bundle里面,然后再传递。
* Android中Intent如果要传递类对象,可以通过两种方式实现。
* 方式一:Serializable,要传递的类实现Serializable接口传递对象,
* 方式二:Parcelable,要传递的类实现Parcelable接口传递对象。
* Serializable(Java自带):
* Serializable是序列化的意思,表示将一个对象转换成可存储或可传输的状态。序列化后的对象可以在网络上进行传输,也可以存储到本地。
* Parcelable(android 专用):
* 除了Serializable之外,使用Parcelable也可以实现相同的效果,
* 不过不同于将对象进行序列化,Parcelable方式的实现原理是将一个完整的对象进行分解,
* 而分解后的每一部分都是Intent所支持的数据类型,这样也就实现传递对象的功能了。
要求被传递的对象必须实现上述2种接口中的一种才能通过Intent直接传递。
public class MainActivity extends Activity {
private TextView mTvOpenN
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
findViewById(R.id.mTvOpenNew).setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
Intent open = new Intent(MainActivity.this,SecondActivity.class);
Person person = new Person();
person.setName("一去二三里");
person.setAge(18);
open.putExtra("put_ser_test", person);
Bundle bundle = new Bundle();
bundle.putSerializable("bundle_ser",person);
open.putExtras(bundle);
startActivity(open);
SecondActivity
package com.amqr.
import android.app.A
import android.content.I
import android.os.B
import android.widget.TextV
import com.amqr.serializabletest.entity.P
* User: LJM
* Date&Time:
* Describe: Describe Text
public class SecondActivity extends Activity{
private TextView mTvD
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
mTvDate = (TextView) findViewById(R.id.mTvDate);
Intent intent = getIntent();
Person per = (Person)intent.getSerializableExtra("put_ser_test");
mTvDate.setText("名字:"+per.getName()+"\\n"
+"年龄:"+per.getAge());
三、android专用的Parcelable的序列化的例子
我们写一个实体类,实现Parcelable接口,马上就被要求
1、复写describeContents方法和writeToParcel方法
2、实例化静态内部对象CREATOR,实现接口Parcelable.Creator 。
也就是,随便一个类实现了Parcelable接口就一开始就会变成这样子
Parcelable方式的实现原理是将一个完整的对象进行分解,而分解后的每一部分都是Intent所支持的数据类型,这样也就实现传递对象的功能了。
public class Pen implements Parcelable{
private int
protected Pen(Parcel in) {
color = in.readString();
size = in.readInt();
public static final Creator&Pen& CREATOR = new Creator&Pen&() {
public Pen createFromParcel(Parcel in) {
return new Pen(in);
public Pen[] newArray(int size) {
return new Pen[size];
public int describeContents() {
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(color);
dest.writeInt(size);
系统已经帮我们做了很多事情,我们需要做的很简单,就写写我们自己需要的构造方法,写一下私有变量的get和set
大概变成这样子:
package com.amqr.serializabletest.
import android.os.P
import android.os.P
* User: LJM
* Date&Time:
* Describe: Describe Text
public class Pen implements Parcelable{
private int
protected Pen(Parcel in) {
color = in.readString();
size = in.readInt();
public static final Creator&Pen& CREATOR = new Creator&Pen&() {
* createFromParcel()方法中我们要去读取刚才写出的name和age字段,
* 并创建一个Person对象进行返回,其中color和size都是调用Parcel的readXxx()方法读取到的,
* 注意这里读取的顺序一定要和刚才写出的顺序完全相同。
* 读取的工作我们利用一个构造函数帮我们完成了
public Pen createFromParcel(Parcel in) {
return new Pen(in);
public Pen[] newArray(int size) {
return new Pen[size];
public int describeContents() {
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(color);
dest.writeInt(size);
public Pen() {
public Pen(String color, int size) {
this.color =
this.size =
public String getColor() {
public void setColor(String color) {
this.color =
public int getSize() {
public void setSize(int size) {
this.size =
其实说起来Parcelable写起来也不是很麻烦,在as里面,我们的一个实体类写好私有变量之后,让这个类继承自Parcelable,接下的步骤是:
1、复写两个方法,分别是describeContents和writeToParcel
2、实例化静态内部对象CREATOR,实现接口Parcelable.Creator 。 以上这两步系统都已经帮我们自动做好了
3、自己写写我们所需要的构造方法,变量的get和set
实现自Parcelable实体Bean已经写好了,接下来我们结合MainActivity和ThirdActivity来使用以下:
MainActivity
package com.amqr.
import android.app.A
import android.content.I
import android.os.B
import android.view.V
import com.amqr.serializabletest.entity.P
import com.amqr.serializabletest.entity.P
* 进行Android开发的时候,我们都知道不能将对象的引用传给Activities或者Fragments,
* 我们需要将这些对象放到一个Intent或者Bundle里面,然后再传递。
* Android中Intent如果要传递类对象,可以通过两种方式实现。
* 方式一:Serializable,要传递的类实现Serializable接口传递对象,
* 方式二:Parcelable,要传递的类实现Parcelable接口传递对象。
* Serializable(Java自带):
* Serializable是序列化的意思,表示将一个对象转换成可存储或可传输的状态。序列化后的对象可以在网络上进行传输,也可以存储到本地。
* Parcelable(android 专用):
* 除了Serializable之外,使用Parcelable也可以实现相同的效果,
* 不过不同于将对象进行序列化,Parcelable方式的实现原理是将一个完整的对象进行分解,
* 而分解后的每一部分都是Intent所支持的数据类型,这样也就实现传递对象的功能了。
要求被传递的对象必须实现上述2种接口中的一种才能通过Intent直接传递。
public class MainActivity extends Activity {
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
findViewById(R.id.mTvOpenNew).setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
Intent open = new Intent(MainActivity.this, SecondActivity.class);
Person person = new Person();
person.setName("一去二三里");
person.setAge(18);
open.putExtra("put_ser_test", person);
Bundle bundle = new Bundle();
bundle.putSerializable("bundle_ser",person);
open.putExtras(bundle);
startActivity(open);
findViewById(R.id.mTvOpenThird).setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
Intent mTvOpenThird = new Intent(MainActivity.this,ThirdActivity.class);
Pen tranPen = new Pen();
tranPen.setColor("big red");
tranPen.setSize(98);
mTvOpenThird.putExtra("parcel_test",tranPen);
startActivity(mTvOpenThird);
ThirdActivity
package com.amqr.
import android.app.A
import android.os.B
import android.widget.TextV
import com.amqr.serializabletest.entity.P
* User: LJM
* Date&Time:
* Describe: Describe Text
public class ThirdActivity extends Activity{
private TextView mTvThirdD
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_third);
mTvThirdDate = (TextView) findViewById(R.id.mTvThirdDate);
Pen pen = (Pen)getIntent().getParcelableExtra("parcel_test");
mTvThirdDate = (TextView) findViewById(R.id.mTvThirdDate);
mTvThirdDate.setText("颜色:"+pen.getColor()+"\\n"
+"大小:"+pen.getSize());
四、Serializable 和Parcelable的对比
android上应该尽量采用Parcelable,效率至上
Serializable代码量少,写起来方便
Parcelable代码多一些
Parcelable的速度比Serializable 高十倍以上
serializable的迷人之处在于你只需要对某个类以及它的属性实现Serializable 接口即可。Serializable 接口是一种标识接口(marker interface),这意味着无需实现方法,Java便会对这个对象进行高效的序列化操作。
这种方法的缺点是使用了反射,序列化的过程较慢。这种机制会在序列化的时候创建许多的临时对象,容易触发垃圾回收。
Parcelable方式的实现原理是将一个完整的对象进行分解,而分解后的每一部分都是Intent所支持的数据类型,这样也就实现传递对象的功能了
没有更多推荐了,
加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!做一个无忧无虑的小码哥
java中Serializable与Parcelable的使用
java序列化:保存内存对象的状态,包括对象的属性值,但不包括方法和static变量(因为static修饰的变量是属于类而不隶属于对象),以及用transient关键字修饰的变量(transient是禁止序列化的标识,效果等同于static修饰的变量).
java反序列化:是与java序列化相对的,表示从磁盘或者其他介质中读取序列化对象的内容.
java序列化的应用场景:
内存中的对象保存到磁盘文件中
网络传输对象,比如Socket套接字传输
通过RMI(Remote Method Invoke 远程方法调用)传输对象,如android中的AIDL
java如何实现序列化:
Serializable序列化的空接口,这个序列化很简单,类直接实现就可以了,记住要添加或者保留序列化版本号serialVersionUID,否则可能会造成反序列化失败.
Parcelable接口,android特有的序列化存储,传输效率高,需要实现里面的抽象方式,实现起来比较麻烦.
Serializable
结果分析:transient关键字修饰的members和staice修饰的code并未序列化,因此说明java序列化保存的是除static及transient关键字修饰的成员,需要注意的是上面的Address同样需要实现Serializable,否则会报序列化异常,另外Serializable序列化是可以继承的,即一个父类实现序列化,子类自动实现序列化,不需要显式实现Serializable接口。
注意到上面程序中有一个 serialVersionUID,serialVersionUID是用来辅助序列化和反序列化过程的,原则上序列化后的对象中serialVersionUID只有和当前类的serialVersionUID相同才能够正常被反序列化,也就是说序列化与反序列化的serialVersionUID必须相同才能够使序列化操作成功。具体过程是这样的:序列化操作的时候系统会把当前类的serialVersionUID写入到序列化文件中,当反序列化时系统会去检测文件中的serialVersionUID,判断它是否与当前类的serialVersionUID一致,如果一致就说明序列化类的版本与当前类版本是一样的,可以反序列化成功,否则失败并报出UID错误.
Parcelable
因为Serializable频繁的进行IO操作,在内存序列化上开销比较大,而内存资源对android系统尤其宝贵,因此android提供了Parcelable接口来实现序列化操作,Parcelable的性能比Serializable好,在内存开销方面较小,所以在内存间数据传输时推荐使用Parcelable,如通过Intent在activity间传输数据,而Parcelable的缺点就使用起来比较麻烦。
没有更多推荐了,
加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/10.html
http://www.cnblogs.com/blueofsky/archive//2315664.html
http://www.2cto.com/kf/476.html
一、序列化、反序列化是什么?
(1) 名词解释
对象的序列化 : 把对象转换为字节序列并存储至一个储存媒介的过程。对象的反序列化:把字节序列恢复为Java对象的过程。
(2) 序列化详细解释
对象的序列化涉及三个点关键点:Java对象、字节序列、存储。1. Java对象的组成?Java对象包含变量与方法。但是序列与反序列化仅处理Java变量而不处理方法,序列与反序列化仅对数据进行处理。2. 什么是字符序列?字符序列是两个词,字符是在计算机和电信领域中,字符(Character)是一个信息单位。数学上,序列是被排成一列的对象(或事件)。《字符-维基百科》 , 《序列-维基百科》 说白了就是连续排列的多个字符的集合。类似于1A3. 存储字符序列需要保存到一个地方,可以是硬盘也可以是内存。简单说法是:序列化把当前对象信息保存下来。反序列化刚好相反的操作。
二、Java对象与Java对象序列化的区别?
Java对象存在的前提必须在JVM运行期间存在,如果想在JVM非运行的情况下或者在其他机器JVM上获取指定Java对象,在现有Java对象的机制下都不可能完成。与Java对象不同的是,如果对Java对象执行序列化操作,因为原理是把Java对象信息保存到存储媒介,所以可以在以上Java对象不可能存在的两种情况下依然可以使用Java对象。
三、为什么要使用序列化、反序列化?
根据以上对序列化、反序列化的理解,这个疑问可以翻译成,为什么需要把对象信息保存到存储媒介中并之后读取出来?因为二中的解释,开发中有在JVM非运行的情况下或者在其他机器JVM上获取指定Java对象的需求。
四、&中Serializable与Parcelable区别?
两种都是用于支持序列化、反序列化话操作,两者最大的区别在于存储媒介的不同,Serializable使用IO读写存储在硬盘上,而Parcelable是直接在内存中读写,很明显内存的读写速度通常大于IO读写,所以在Android中通常优先选择Parcelable。Serializable不是当前关注的焦点,不过可以查看《Java序列化算法透析》这篇文章中实现一个简单的Serializable例子,查看序列化生成的IO文件,并且以16进制读取并一一解释每一个16进制数字的含义。
Views(...) Comments()序列化Serializable和Parcelable的理解和区别 - 简书
序列化Serializable和Parcelable的理解和区别
本文出自 “阿敏其人” 简书博客,转载或引用请注明出处。
一、android为什么要序列化?什么是序列化,怎么进行序列化
为什么要了解序列化?—— 进行Android开发的时候,无法将对象的引用传给Activities或者Fragments,我们需要将这些对象放到一个Intent或者Bundle里面,然后再传递。
什么是序列化 —— 序列化,表示将一个对象转换成可存储或可传输的状态。序列化后的对象可以在网络上进行传输,也可以存储到本地。
怎么通过序列化传输对象?
Android中Intent如果要传递类对象,可以通过两种方式实现。
方式一:Serializable,要传递的类实现Serializable接口传递对象,
方式二:Parcelable,要传递的类实现Parcelable接口传递对象。
Serializable(Java自带):
Serializable是序列化的意思,表示将一个对象转换成可存储或可传输的状态。序列化后的对象可以在网络上进行传输,也可以存储到本地。
Parcelable(android 专用):
除了Serializable之外,使用Parcelable也可以实现相同的效果,
不过不同于将对象进行序列化,Parcelable方式的实现原理是将一个完整的对象进行分解,
而分解后的每一部分都是Intent所支持的数据类型,这样也就实现传递对象的功能了。
实现Parcelable的作用
1)永久性保存对象,保存对象的字节序列到本地文件中;
2)通过序列化对象在网络中传递对象;
3)通过序列化在进程间传递对象。
选择序列化方法的原则
1)在使用内存的时候,Parcelable比Serializable性能高,所以推荐使用Parcelable。
2)Serializable在序列化的时候会产生大量的临时变量,从而引起频繁的GC。
3)Parcelable不能使用在要将数据存储在磁盘上的情况,因为Parcelable不能很好的保证数据的持续性在外界有变化的情况下。尽管Serializable效率低点,但此时还是建议使用Serializable 。
需要在多个部件(Activity或Service)之间通过Intent传递一些数据,简单类型(如:数字、字符串)的可以直接放入Intent。复杂类型必须实现Parcelable接口。
二、利用java自带的Serializable 进行序列化的例子
弄一个实体类 Person,利用Java自带的Serializable进行序列化
package com.amqr.serializabletest.
import java.io.S
* User: LJM
* Date&Time:
* Describe: Describe Text
public class Person implements Serializable{
private static final long serialVersionUID = 8556980L;
public int getAge() {
public void setAge(int age) {
this.age =
public String getName() {
public void setName(String name) {
this.name =
使用,MainActivity和SecondActivity结合使用
MainActivity
package com.amqr.
import android.app.A
import android.content.I
import android.os.B
import android.view.V
import android.widget.TextV
import com.amqr.serializabletest.entity.P
* 进行Android开发的时候,我们都知道不能将对象的引用传给Activities或者Fragments,
* 我们需要将这些对象放到一个Intent或者Bundle里面,然后再传递。
* Android中Intent如果要传递类对象,可以通过两种方式实现。
* 方式一:Serializable,要传递的类实现Serializable接口传递对象,
* 方式二:Parcelable,要传递的类实现Parcelable接口传递对象。
* Serializable(Java自带):
* Serializable是序列化的意思,表示将一个对象转换成可存储或可传输的状态。序列化后的对象可以在网络上进行传输,也可以存储到本地。
* Parcelable(android 专用):
* 除了Serializable之外,使用Parcelable也可以实现相同的效果,
* 不过不同于将对象进行序列化,Parcelable方式的实现原理是将一个完整的对象进行分解,
* 而分解后的每一部分都是Intent所支持的数据类型,这样也就实现传递对象的功能了。
要求被传递的对象必须实现上述2种接口中的一种才能通过Intent直接传递。
public class MainActivity extends Activity {
private TextView mTvOpenN
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
findViewById(R.id.mTvOpenNew).setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
Intent open = new Intent(MainActivity.this,SecondActivity.class);
Person person = new Person();
person.setName("一去二三里");
person.setAge(18);
// 传输方式一,intent直接调用putExtra
// public Intent putExtra(String name, Serializable value)
open.putExtra("put_ser_test", person);
// 传输方式二,intent利用putExtras(注意s)传入bundle
Bundle bundle = new Bundle();
bundle.putSerializable("bundle_ser",person);
open.putExtras(bundle);
startActivity(open);
SecondActivity
package com.amqr.
import android.app.A
import android.content.I
import android.os.B
import android.widget.TextV
import com.amqr.serializabletest.entity.P
* User: LJM
* Date&Time:
* Describe: Describe Text
public class SecondActivity extends Activity{
private TextView mTvD
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
mTvDate = (TextView) findViewById(R.id.mTvDate);
Intent intent = getIntent();
// 关键方法:getSerializableExtra ,我们的类是实现了Serializable接口的,所以写这个方法获得对象
// public class Person implements Serializable
Person per = (Person)intent.getSerializableExtra("put_ser_test");
//Person per = (Person)intent.getSerializableExtra("bundle_ser");
mTvDate.setText("名字:"+per.getName()+"\\n"
+"年龄:"+per.getAge());
Serializable的序列化.gif
Serializable 到此完成
三、android专用的Parcelable的序列化的例子
我们写一个实体类,实现Parcelable接口,马上就被要求
1、复写describeContents方法和writeToParcel方法
2、实例化静态内部对象CREATOR,实现接口Parcelable.Creator 。
也就是,随便一个类实现了Parcelable接口就一开始就会变成这样子
Parcelable方式的实现原理是将一个完整的对象进行分解,而分解后的每一部分都是Intent所支持的数据类型,这样也就实现传递对象的功能了。
public class Pen implements Parcelable{
protected Pen(Parcel in) {
color = in.readString();
size = in.readInt();
public static final Creator&Pen& CREATOR = new Creator&Pen&() {
public Pen createFromParcel(Parcel in) {
return new Pen(in);
public Pen[] newArray(int size) {
return new Pen[size];
public int describeContents() {
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(color);
dest.writeInt(size);
系统已经帮我们做了很多事情,我们需要做的很简单,就写写我们自己需要的构造方法,写一下私有变量的get和set
大概变成这样子:
package com.amqr.serializabletest.
import android.os.P
import android.os.P
* User: LJM
* Date&Time:
* Describe: Describe Text
public class Pen implements Parcelable{
// 系统自动添加,给createFromParcel里面用
protected Pen(Parcel in) {
color = in.readString();
size = in.readInt();
public static final Creator&Pen& CREATOR = new Creator&Pen&() {
* @param in
* createFromParcel()方法中我们要去读取刚才写出的name和age字段,
* 并创建一个Person对象进行返回,其中color和size都是调用Parcel的readXxx()方法读取到的,
* 注意这里读取的顺序一定要和刚才写出的顺序完全相同。
* 读取的工作我们利用一个构造函数帮我们完成了
public Pen createFromParcel(Parcel in) {
return new Pen(in); // 在构造函数里面完成了 读取 的工作
//供反序列化本类数组时调用的
public Pen[] newArray(int size) {
return new Pen[size];
public int describeContents() {
// 内容接口描述,默认返回0即可。
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(color);
// 写出 color
dest.writeInt(size);
// 写出 size
// ======分割线,写写get和set
//个人自己添加
public Pen() {
//个人自己添加
public Pen(String color, int size) {
this.color =
this.size =
public String getColor() {
public void setColor(String color) {
this.color =
public int getSize() {
public void setSize(int size) {
this.size =
其实说起来Parcelable写起来也不是很麻烦,在as里面,我们的一个实体类写好私有变量之后,让这个类继承自Parcelable,接下的步骤是:
1、复写两个方法,分别是describeContents和writeToParcel
2、实例化静态内部对象CREATOR,实现接口Parcelable.Creator 。 以上这两步系统都已经帮我们自动做好了
3、自己写写我们所需要的构造方法,变量的get和set
实现自Parcelable实体Bean已经写好了,接下来我们结合MainActivity和ThirdActivity来使用以下:
MainActivity
package com.amqr.
import android.app.A
import android.content.I
import android.os.B
import android.view.V
import com.amqr.serializabletest.entity.P
import com.amqr.serializabletest.entity.P
* 进行Android开发的时候,我们都知道不能将对象的引用传给Activities或者Fragments,
* 我们需要将这些对象放到一个Intent或者Bundle里面,然后再传递。
* Android中Intent如果要传递类对象,可以通过两种方式实现。
* 方式一:Serializable,要传递的类实现Serializable接口传递对象,
* 方式二:Parcelable,要传递的类实现Parcelable接口传递对象。
* Serializable(Java自带):
* Serializable是序列化的意思,表示将一个对象转换成可存储或可传输的状态。序列化后的对象可以在网络上进行传输,也可以存储到本地。
* Parcelable(android 专用):
* 除了Serializable之外,使用Parcelable也可以实现相同的效果,
* 不过不同于将对象进行序列化,Parcelable方式的实现原理是将一个完整的对象进行分解,
* 而分解后的每一部分都是Intent所支持的数据类型,这样也就实现传递对象的功能了。
要求被传递的对象必须实现上述2种接口中的一种才能通过Intent直接传递。
public class MainActivity extends Activity {
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
findViewById(R.id.mTvOpenNew).setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
Intent open = new Intent(MainActivity.this, SecondActivity.class);
Person person = new Person();
person.setName("一去二三里");
person.setAge(18);
// 传输方式一,intent直接调用putExtra
// public Intent putExtra(String name, Serializable value)
open.putExtra("put_ser_test", person);
// 传输方式二,intent利用putExtras(注意s)传入bundle
Bundle bundle = new Bundle();
bundle.putSerializable("bundle_ser",person);
open.putExtras(bundle);
startActivity(open);
// 采用Parcelable的方式
findViewById(R.id.mTvOpenThird).setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
Intent mTvOpenThird = new Intent(MainActivity.this,ThirdActivity.class);
Pen tranPen = new Pen();
tranPen.setColor("big red");
tranPen.setSize(98);
// public Intent putExtra(String name, Parcelable value)
mTvOpenThird.putExtra("parcel_test",tranPen);
startActivity(mTvOpenThird);
ThirdActivity
package com.amqr.
import android.app.A
import android.os.B
import android.widget.TextV
import com.amqr.serializabletest.entity.P
* User: LJM
* Date&Time:
* Describe: Describe Text
public class ThirdActivity extends Activity{
private TextView mTvThirdD
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_third);
mTvThirdDate = (TextView) findViewById(R.id.mTvThirdDate);
Intent intent = getIntent();
Pen pen = (Pen)intent.getParcelableExtra("parcel_test");
Pen pen = (Pen)getIntent().getParcelableExtra("parcel_test");
mTvThirdDate = (TextView) findViewById(R.id.mTvThirdDate);
mTvThirdDate.setText("颜色:"+pen.getColor()+"\\n"
+"大小:"+pen.getSize());
Parcelable的方式.gif
完成,Serializable 和Parcelable 这两种方式都介绍完成了。接下说一说对比
四、Serializable 和Parcelable的对比
android上应该尽量采用Parcelable,效率至上
Serializable代码量少,写起来方便
Parcelable代码多一些
Parcelable的速度比高十倍以上
serializable的迷人之处在于你只需要对某个类以及它的属性实现Serializable 接口即可。Serializable 接口是一种标识接口(marker interface),这意味着无需实现方法,Java便会对这个对象进行高效的序列化操作。
这种方法的缺点是使用了反射,序列化的过程较慢。这种机制会在序列化的时候创建许多的临时对象,容易触发垃圾回收。
Parcelable方式的实现原理是将一个完整的对象进行分解,而分解后的每一部分都是Intent所支持的数据类型,这样也就实现传递对象的功能了
Android中Parcelable接口用法
Android系统中Parcelable和Serializable的区别
第一行代码
童嬉邹鲁,独立佛鹏,
远方和诗,此阶不辜。
Android跨进程通信IPC整体内容如下 1、Android跨进程通信IPC之1——Linux基础2、Android跨进程通信IPC之2——Bionic3、Android跨进程通信IPC之3——关于&JNI&的那些事4、Android跨进程通信IPC之4——Android...
上篇文章介绍了IPC机制的基本概念以及简单使用,文章链接:Android 关于IPC机制的理解(一) 这篇文章主要是关于IPC的方式,也就是用什么方式来进行进程间通信;介绍使用前首先我们得了解几个概念,就是序列化和反序列以及Binder。序列化和反序列化在Java中序列化是...
用两张图告诉你,为什么你的 App 会卡顿? - Android - 掘金Cover 有什么料? 从这篇文章中你能获得这些料: 知道setContentView()之后发生了什么? ... Android 获取 View 宽高的常用正确方式,避免为零 - 掘金相信有很多朋友...
用两张图告诉你,为什么你的 App 会卡顿? - Android - 掘金 Cover 有什么料? 从这篇文章中你能获得这些料: 知道setContentView()之后发生了什么? ... Android 获取 View 宽高的常用正确方式,避免为零 - 掘金 相信有很多...
JAVA序列化机制的深入研究 对象序列化的最主要的用处就是在传递,和保存对象(object)的时候,保证对象的完整性和可传递性。 序列化算法一般会按步骤做如下事情: ◆ 将对象实例相关的类元数据输出。 ◆ 递归地输出类的超类描述直到不再有超类。 ◆ 类元数据完了以后,开始从...
你从楚国的花园里走出来 娉婷年纪 黯淡了一树树华贵的鲜花 暗夜里那句 透彻心扉的应答 用尽了毕生的力气 也花光了义渠君 一生的运气 身上的凤冠霞帔 惊艳了秦国的天空 你如一颗备受呵护的夜明珠 珍藏在秦王的心头 独自向晚 路过多少仰慕与追随 你的一泓秋水又淹没了谁 谁是谁的穿...
当夕阳西下,落雁惊起 你愿意牵起我的手一起拉长地上的影子吗? 当长廊圆梦,人潮来往 你愿意揽着我一起看时光穿梭吗? 当繁华落尽,长桥不叹 你愿意看着我一起读懂对方的忧郁吗? 潮涨潮落,白马过隙 我就在这里 你愿意来吗?
生活中我们常常会听到这样的话:“我说话直你别介意”“我就这样你别介意”“如果你不介意的话帮我……”“反正你顺路,反正你没事,反正你方便……”讲真,我还真介意。凭什么因为你讲话直我就应该做这个被指指点点的受害者,我妆画得不好看,衣服不太搭,真的不值得你满世界的奔走相告。凭什么...
不管是健身新手还是健身老鸟,对于力量举三大项之一——卧推,都情有独钟。 不错,无论平板,上斜还是下斜卧推,都会入选大多数健身者练胸的主要动作。那么,练了这么多年的你是不是每次练习时,肩部都隐隐作痛呢?冲击大重量时是不是手腕有些力不从心呢?我们今天就来聊聊卧推。 1.卧推练哪...}

我要回帖

更多关于 java 加载jar包中类 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信