Android高级架构进阶之数据传输与序列化
-
所谓的Serializable,就是java提供的通用数据保存和读取的接口。至于从什么地方读出来和保存到哪里去都被隐藏在函数参数的背后了。这样子,任何类型只要实现了Serializable接口,就可以被保存到文件中,或者作为数据流通过网络发送到别的地方。也可以用管道来传输到系统的其他程序中。这样子极大的简化了类的设计。只要设计一个保存一个读取功能就能解决上面说得所有问题。
-
java的"对象序列化"能让你将一个实现了Serializable接口的对象转换成一组byte,这样日后要用这个对象时候,你就能把这些byte数据恢复出来,并据此重新构建那个对象了。
-
工作流当中流程变量的几种数据类型:string、integer、short、long、double、boolean、date、binary、serializable,这就是为什么要将javabean实现序列化的原因,因为你将对象设置到流程变量中必须要实现序列化,否则会在设置流程变量的时候报错找不到该类型。
-
java对象序列化机制就是把内存中的Java对象(User之类的JavaBean)转换成二进制流。java对象序列化后可以很方便的存储或者在网络中传输。
-
Java的序列化机制是通过运行时判断类的序列化ID(serialVersionUID)来判定版本的一致性。
-
在反序列化时,java虚拟机会通过二进制流中的serialVersionUID与本地的对应的实体类进行比较,如果相同就认为是一致的,可以进行反序列化,正确获得信息,否则抛出序列化版本不一致的异常。
-
所以涉及到数据传输或者存储的类,严格意义上来说都要加上序列化ID,这也是一种良好的编程习惯
。
=======================================================================================
###2.1 Android源码中的Parcelable
/**
-
Interface for classes whose instances can be written to
-
and restored from a {@link Parcel}. Classes implementing the Parcelable
-
interface must also have a non-null static field called
CREATOR
-
of a type that implements the {@link Parcelable.Creator} interface.
-
A typical implementation of Parcelable is:
-
public class MyParcelable implements Parcelable {
-
private int mData;
-
public int describeContents() {
-
return 0;
-
}
-
public void writeToParcel(Parcel out, int flags) {
-
out.writeInt(mData);
-
}
-
public static final Parcelable.Creator<MyParcelable> CREATOR
-
= new Parcelable.Creator<MyParcelable>() {
-
public MyParcelable createFromParcel(Parcel in) {
-
return new MyParcelable(in);
-
}
-
public MyParcelable[] newArray(int size) {
-
<return new MyParcelable[size];