对象序列化传递 Serializable 和Parcelable
来源:互联网 发布:java web service教程 编辑:程序博客网 时间:2024/04/23 15:07
序列化的概念,用于把一个对象转换为字节序列,然后再对这个字节序列做存储和传递操作,与之对应的是反序列化,反序列化是把一个字节序列恢复为Java对象的过程,而序列化是把Java对象转化为字节序列的过程。
Serializable
- Serializable序列化不保存静态变量,另外使用Transient关键字可声明对指定字段不做序列化。
2.由于Serializable方式使用了反射机制,使得序列化的过程相对较慢。并且,这种机制会在序列化的时候创建许多的临时对象,容易触发垃圾回收。
3.Serializable可将数据持久化方便保存,所以在需要保存文件或网络传输数据时应选择Serializable。
public class SData implements Serializable{ public int age; public String name; public Boolean sex; public double height;}
Parcelable
1.Parcelable数据仅在内存中存在,所以在内存间数据传输时推荐使用
2.采用Parcelable方式的类,需要自己定义如何打包(写数据)和解包(读数据),其余的序列化操作则由底层实现。具体需要实现的方法如下:
<1>writeToParcel(Parcel out, int flags) : 写数据
<2>Parcelable.Creator<类名> CREATOR : 例行公事实现createFromParcel(读数据)和newArray
<3>describeContents : 返回0即可
public class PDate implements Parcelable { public int age; public String name; public Boolean sex; public double height; public static final Creator<PDate> CREATOR = new Creator<PDate>() { // 读数据 @Override public PDate createFromParcel(Parcel in) { PDate pDate=new PDate(); pDate.age=in.readInt(); pDate.name=in.readString(); pDate.sex=in.readByte()!=0; pDate.height=in.readDouble(); return pDate; } @Override public PDate[] newArray(int size) { return new PDate[size]; } }; @Override public int describeContents() { return 0; } // 写数据 @Override public void writeToParcel(Parcel dest, int flags) { dest.writeInt(age); dest.writeString(name); dest.writeDouble(height); dest.writeByte((byte) (sex ? 1 : 0)); }}
Parcelable暂不支持直接操作布尔boolean类型,但能间接通过设置byte位来实现boolean类型的参数传递。
下面是数据的传递代码
MainActivity
public class MainActivity extends Activity implements View.OnClickListener { public Button button1, button2; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); button1 = (Button) findViewById(R.id.SDate); button2 = (Button) findViewById(R.id.PDate); button1.setOnClickListener(this); button2.setOnClickListener(this); } @Override public void onClick(View v) { int id = v.getId(); switch (id) { case R.id.SDate: SData sData = new SData(); sData.age = 22; sData.name = "bingge"; sData.sex = true; sData.height = 18.5; Intent intent = new Intent(this, Serializable_Activity.class); Bundle bundle = new Bundle(); bundle.putSerializable("people", sData); intent.putExtras(bundle); startActivity(intent); break; case R.id.PDate: PDate pDate = new PDate(); pDate.age = 18; pDate.name = "lihong"; pDate.sex = false; pDate.height = 16.5; Intent intent2 = new Intent(this, Pacelable_Activity.class); Bundle bundle2 = new Bundle(); bundle2.putParcelable("hong", pDate); intent2.putExtras(bundle2); startActivity(intent2); break; default: } }}
Serializable_Activity接收数据
public class Serializable_Activity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.serializable_layout); Bundle bundle = getIntent().getExtras(); SData sData = (SData) bundle.getSerializable("people"); String daye = sData.age + ""; String daye2 = sData.name; String daye3 = sData.sex + ""; String daye4 = sData.height + ""; System.out.println("shuju:" + daye + daye2 + daye3 + daye4); }}
Pacelable_Activity接收数据
public class Pacelable_Activity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.parcelable_layout); Bundle bundle = getIntent().getExtras(); PDate pDate = bundle.getParcelable("hong"); String daye= pDate.age+""; String daye2= pDate.name; String daye3= pDate.sex+""; String daye4= pDate.height+""; System.out.println("shuju:"+daye+daye2+daye3+daye4); }}
0 0
- 对象序列化传递 Serializable 和Parcelable
- Android对象序列化:Serializable和Parcelable
- Android Intent传递对象(Serializable和Parcelable序列化对象)
- Android-Intent传递对象序列化之Serializable与Parcelable
- Intent传递对象信息方式Parcelable和Serializable(序列化)
- Parcelable和Serializable序列化
- Serializable和Parcelable序列化
- 序列化Parcelable 和 Serializable
- 使用Serializable和 parcelable传递对象
- Android中Serializable和Parcelable序列化对象
- Android中Serializable和Parcelable序列化对象详解
- Android中Serializable和Parcelable序列化对象详解
- Android中Serializable和Parcelable序列化对象详解
- Android中Serializable和Parcelable序列化对象详解
- Android中Serializable和Parcelable序列化对象详解
- 对象序列化的两种方式 Serializable和Parcelable
- Android中Serializable和Parcelable序列化对象详解
- Android中Serializable和Parcelable序列化对象详解
- 没时间解释了,快使用Snackbar!——Android Snackbar花式使用指南
- 在回调函数中发布消息:Call to publish() on an invalid Publisher
- 基于CABasicAnimation的完美跑马灯效果
- 微信支付服务端总结
- 日志文件设计学习(一)
- 对象序列化传递 Serializable 和Parcelable
- 结构化程序设计
- 下拉刷新 与 ViewPage 的冲突 Tab页存在Scrollview嵌套 recycleview 切换回来焦点不对
- RabbitMQ基础概念详细介绍
- 数据的标准化
- Torch 框架下的 imagenet 图像分类
- jvm配置参数解析
- JS常用正则表达式
- Nginx 模块自主开发七:源码剖析整个Nginx框架