进程间数据传递载体——Parcel(一)

来源:互联网 发布:淘宝明星zero距离签名 编辑:程序博客网 时间:2024/05/17 23:46

    前段时间参与一个项目关于进程间通信,看人家的代码中Parcel用的各种6,可是咱看不懂呀!所以只好在查些资料咯! 

    所谓Parcel英文直译就是“打包”的意思。如果进程间通信直接传递引用对象,这样也只是传递了对象的内存地址,这样的行为是

行不通的,毕竟两个进程间的虚拟内存是不同的。但是我通过Parcel将内存地址中存储的数据打包呢。。这样就可以把数据传递过去了!

    下面介绍下Parcel相关的方法:

    dataSize();获取当前已经存储的数据大小。

    setDataCapacity(int size);设置Parcel的空间大小,显然存储的数据不能大于这个值。

    setDataPosition(int pos);改变Parcel中的读写位置,必须介于0和dataSize()之间。

    dataAvail():当前Parcel中的可读数据大小。

    dataCapacity():当前Parcel的存储能力。

    dataPosition():数据当前位置值,类似游标。



    Primitives

    原始类型数据的读写操作:

    writeByte(byte):写入一个byte;

    readByte():读取一个byte;

    writeDouble(double) :写入一个double

    readDouble();读取一个double.

    从上面看出读写是配套的。数据是按照host cpu的字节序来读写的


    Primitives Arrays

    原始数据类型数组的读写操作通常是先写入用4个字节表示的数据大小值,接着才写入数据本身。另外,用户既可以选择将数据读入现有的数组空间中,也可以让Parcel返回一个新的数组。

    writeBoolenArray(boolean[ ] ):写入布尔数组。

    readBooleanArray(boolean[ ]):读入布尔数组。

    boolean[ ] createBooleanArray():读取并返回一个布尔数组。’

    writeByteArray(byte[ ]):写入字节数组。

    writeByteArray(byte[ ],int ,int):和上面几个不同的是,这个函数最后面的两个参数分别是表示数组中需要被写入的数据起点以及需要写入多少。

    readByteArray(byte[ ]):读取字节数组。

    byte[ ] createByteArray():读取并返回一个数组

*****   如果写入数据的时候系统发现已经超出了Parcel的存储能力,它会自动申请所需的内存控件,并扩展dataCapacity;并且每次写入都是从dataPosition()开始的。 


0 0
原创粉丝点击