一:序列化,就是把对象转化为字节码文件(因为字节码才能跨平台传输),才能进行网络传输。
把该字节序列保存起来(例如:保存在一个文件里),以后可以随时将该字节序列恢复为原来的对象。甚至可以将该字节序列放到其他计算机上或者通过网络传输到其他计算机上恢复,只要该计算机平台存在相应的类就可以正常恢复为原来的对象。
序列化:ObjectOutputStream代表对象输出流,它的writeObject(Object obj)方法可对参数指定的obj对象进行序列化,把得到的字节序列写到一个目标输出流中。
反序化:ObjectInputStream代表对象输入流,它的readObject()方法从一个源输入流中读取字节序列,再把它们反序列化为一个对象,并将其返回。
二:Parcelable和Serializable的区别:
内存间数据传输时推荐使用Parcelable,如activity间传输数据
保存到本地或者网络传输时推荐使用Serializable
最简单的demo:
Fruit类:
public class Fruit implements Serializable { private String name; private String id; private String cost; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getId() { return id; } public void setId(String id) { this.id = id; } public String getCost() { return cost; } public void setCost(String cost) { this.cost = cost; } }MainActivity:
setContentView(R.layout.activity_main); Fruit a = new Fruit(); a.setCost("20"); a.setId("123"); a.setName("banana"); Intent intent = new Intent(this,Main2Activity.class);//(注意在manifest中声明Main2Activity) intent.putExtra("Fruit",a); startActivity(intent);Main2Activity:
setContentView(R.layout.activity_main2); Fruit p = (Fruit)getIntent().getSerializableExtra("Fruit"); System.out.println("aaaaa "+p.getName()); System.out.println("bbbbb "+p.getCost()); System.out.println("ccccc "+p.getId());运行结果: 12-01 13:06:23.555 2659-2659/example.com.test_for_serializable I/System.out: aaaaabanana
12-01 13:06:23.555 2659-2659/example.com.test_for_serializable I/System.out: bbbbb20
12-01 13:06:23.555 2659-2659/example.com.test_for_serializable I/System.out: ccccc123