微信扫一扫打赏支持

序列化

序列化

一、serializable和parcelable区别

serializable是java里面的序列化,parcelable是android里面的序列化。

serializable序列化之后的文件是放在本地磁盘的,便于持久存储;

parcelable序列化之后的文件是放在内存的,速度很快;

serializable的序列化和反序列化已经写好了,我们只需要傻瓜式调用即可,parcelable的序列化和反序列化要我们自己写。

 

二、代码实例

Serializable序列化方式

 activityDataSend.testClass1_serialize

 1 package activityDataSend;
 2 
 3 import java.io.Serializable;
 4 
 5 public class testClass1_serialize implements Serializable{
 6     private String name;
 7     private int age;
 8     public String getName() {
 9         return name;
10     }
11     public void setName(String name) {
12         this.name = name;
13     }
14     public int getAge() {
15         return age;
16     }
17     public void setAge(int age) {
18         this.age = age;
19     }
20     public testClass1_serialize(String name, int age) {
21         super();
22         this.name = name;
23         this.age = age;
24     }
25     public testClass1_serialize() {
26         super();
27     }
28     @Override
29     public String toString() {
30         return "testClass1_serialize [name=" + name + ", age=" + age + "]";
31     }
32     
33 }
Parcelable序列化方式

activityDataSend.testClass2_parcelable

序列化差不多要自己写
反序列化也要自己写
 1 package activityDataSend;
 2 
 3 import android.os.Parcel;
 4 import android.os.Parcelable;
 5 
 6 /*
 7  * Parcelable序列化方式
 8  * 序列化差不多要自己写
 9  * 反序列化也要自己写
10  */
11 public class testClass2_parcelable implements Parcelable{
12     private String name;
13     private int age;
14     public String getName() {
15         return name;
16     }
17     public void setName(String name) {
18         this.name = name;
19     }
20     public int getAge() {
21         return age;
22     }
23     public void setAge(int age) {
24         this.age = age;
25     }
26     public testClass2_parcelable() {
27         super();
28     }
29     public testClass2_parcelable(String name, int age) {
30         super();
31         this.name = name;
32         this.age = age;
33     }
34     
35     @Override
36     public String toString() {
37         return "testClass2_parcelable [name=" + name + ", age=" + age + "]";
38     }
39     @Override
40     public int describeContents() {
41         // TODO Auto-generated method stub
42         return 0;
43     }
44     /*
45      * 序列化
46      * (non-Javadoc)
47      * @see android.os.Parcelable#writeToParcel(android.os.Parcel, int)
48      */
49     @Override
50     public void writeToParcel(Parcel dest, int flags) {//序列化
51         // TODO Auto-generated method stub
52         dest.writeString(name);
53         dest.writeInt(age);
54     }
55     /*
56      * 反序列化要自己写,下面这个全局静态变量需要我们自己写
57      */
58     public static Parcelable.Creator<testClass2_parcelable> CREATOR=new Creator<testClass2_parcelable>() {
59         
60         @Override
61         public testClass2_parcelable[] newArray(int size) {
62             // TODO Auto-generated method stub
63             return null;
64         }
65         /*
66          * 反序列化
67          * (non-Javadoc)
68          * @see android.os.Parcelable.Creator#createFromParcel(android.os.Parcel)
69          */
70         @Override
71         public testClass2_parcelable createFromParcel(Parcel source) {//反序列化
72             // TODO Auto-generated method stub
73             testClass2_parcelable class2=new testClass2_parcelable();
74             class2.setName(source.readString());
75             class2.setAge(source.readInt());
76             return class2;
77         }
78     };
79 }

 

三、序列化使用实例

在MainActivity页面创建序列化对象,然后用intent.putExtra方法将序列化对象传递给Activity01页面

activityDataSend.MainActivity

 1 package activityDataSend;
 2 
 3 
 4 
 5 
 6 
 7 import com.example.activityDataSend.R;
 8 
 9 import android.app.Activity;
10 import android.content.Intent;
11 import android.content.Loader;
12 import android.os.Bundle;
13 import android.view.View;
14 import android.view.View.OnClickListener;
15 import android.widget.Button;
16 
17 
18 
19 public class MainActivity extends Activity{
20     private Button btn_openActivty;//创建一个button对象
21      protected void onCreate(Bundle savedInstanceState) {
22             super.onCreate(savedInstanceState);//父类操作
23             setContentView(R.layout.activity_main);//引入名为activity_main的界面
24             btn_openActivty=(Button) findViewById(R.id.btn_openActivity);//找id为btn_openActivity的button
25             btn_openActivty.setOnClickListener(new OnClickListener() {//设置button点击监听
26                 
27                 @Override
28                 public void onClick(View v) {//onclick事件
29                     // TODO Auto-generated method stub
30                     Intent intent=new Intent();//初始化intent
31                     intent.setClass(MainActivity.this,Activity01.class);//连接
32                     //下面这句话用于intent在activity之间传输data
33                     intent.putExtra("data1", "我是fry");//前面是键,后面是值,这个是string
34                     intent.putExtra("data2", 0.2);//这个是double
35                     //传递对象,serializable序列化方式
36                     testClass1_serialize class1=new testClass1_serialize("fry1",21);
37                     intent.putExtra("data3_obj", class1);
38                     
39                     //传递对象,parcelable序列化方式
40                     testClass2_parcelable class2=new testClass2_parcelable("fry2",22);
41                     intent.putExtra("data4_obj", class2);
42                     
43                     startActivity(intent);//打开activity
44                 }
45             });
46         }
47 }

activityDataSend.Activity01

 1 package activityDataSend;
 2 
 3 
 4 
 5 import com.example.activityDataSend.R;
 6 
 7 import android.app.Activity;
 8 import android.os.Bundle;
 9 import android.util.Log;
10 import android.widget.TextClock;
11 import android.widget.TextView;
12 
13 public class Activity01 extends Activity{
14     private TextView textView_ans;
15     @Override
16     protected void onCreate(Bundle savedInstanceState) {
17         // TODO Auto-generated method stub
18         super.onCreate(savedInstanceState);
19         setContentView(R.layout.activity01);
20         
21         textView_ans=(TextView) findViewById(R.id.textView_ans);
22         Bundle bundle = getIntent().getExtras();
23         String data1=bundle.getString("data1");
24         double data2=bundle.getDouble("data2");
25         testClass1_serialize data3_obj=(testClass1_serialize) bundle.get("data3_obj");
26         testClass2_parcelable data4_obj=(testClass2_parcelable) bundle.get("data4_obj");
27         
28         Log.d("MainActivity",bundle.get("data3_obj")+"\n"+bundle.get("data4_obj"));
29         System.out.println(bundle.get("data3_obj")+"\n"+bundle.get("data4_obj"));
30         
31         textView_ans.setText("data1: "+data1+"\ndata2: "+data2+"\ndata3_obj: "+data3_obj+"\ndata4_obj: "+data4_obj);
32         //textView_ans.setText("data1: "+data1+"\ndata2: "+data2+"\ndata4_obj: "+data4_obj);
33     }
34 }

效果图片

 

posted @ 2017-07-31 14:15  范仁义  阅读(416)  评论(0编辑  收藏  举报