欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Android中Parcel用法详解

程序员文章站 2024-03-03 14:48:16
本文实例讲述了android中parcel用法。分享给大家供大家参考,具体如下: android 中parcel 的使用,他是一个存储基本数据类型和引用数据类型的容器,在...

本文实例讲述了android中parcel用法。分享给大家供大家参考,具体如下:

android 中parcel 的使用,他是一个存储基本数据类型和引用数据类型的容器,在andorid 中通过ibinder来绑定数据在进程间传递数据。

parcel parcel = parcel.obtain();// 获取一个parcel 对象

下面就可以对其进行方法进行操作了,createxxx(),wirtexxx(),readxxx(),
其中dataposition(),返回当前parcel 当前对象存储数据的偏移量,而setdataposition(),设置当前parcel 对象的偏移量,方便读取parcel 中的数据,可问题就出在我读取出来的数据要么是空(null),要么永远是第一个偏移量处的值,存储和读取数据的。parcel采用什么机制实现的,是以什么形式的存储的,然后我才能任意对其操作,读取目标数据。

基本数据类型的取值范围:

boolean 1bit
short 16bit
int 32bit
long 64bit
float 32bit
double 64bit
char 16bit
byte 8bit

由此我可以猜想,parcel 32bit 作为基本单位存储写入的变量,4byte*8=32bit,在内存中的引用地址变量是采用16进制进行编码,且作为偏移量,即偏移量是4的倍数,0,4,8,12,16,20,24,28,32,36,40,44,48......4*n,

f(x) = 4*y{y>=0&y是自然数}

我想绝对不会出现向偏移量是3,6,9这样的数据。。。

由此我们可以推断出,无论他存储的是基本数据类型或引用数据类型的变量,都是以32bit基本单位作为偏移量,

parcel.writeint(1);
parcel.writeint(2);
parcel.writeint(3);
parcel.writeint(4);
parcel.writeint(5);
parcel.writeint(6);
parcel.writeint(7);
parcel.writeint(81011111);
parcel.writefloat(1f);
parcel.writefloat(1000000000000000000000000000000000000f);

parcel.writexxx(),每写一次数据,在32bit的空间里能够存储要放入的变量,怎只占一个偏移量,也就之一动4个位置,而当存储的数据如 parcel.writefloat(1000000000000000000000000000000000000f);他就自动往后移动,

parcel.writestring("a");
parcel.writestring("b");
parcel.writestring("d");
parcel.writestring("c");


parcel.writestring("abcd");

 的区别。由此可见,他的内存的分配原来是这样的。

那我怎样才能把我存进去的书据依次的去出来呢?setdataposition(),设置parcel 的偏移量,在readxxx(),读取数据

int size = parcel.datasize();
int i = 0;
while (i <= size ) {
parcel.setdataposition(i);
int curr_int = parcel.readint();
i+=4;
int j = 0;
j++;
}

由此可见parcel 写入数据是按照32bit 为基本的容器,依次存储写入的数据,基本和引用(其实引用的也是有多个基本数据类型组合而成objects-属性|方法),读取的时候我们就可以按照这种规律根据目标数据的偏移量的位置(curr_position),以及偏移量的大小(size),,取出已经存进去的数据了

int i = curr_position;
while (i <= size ) {
parcel.setdataposition(i);
int curr_int = parcel.readxxxt();
i+=4;
int j = 0;
j++;
}

这样就ok 了

他的createxxx()方法现在没用,用了在说吧!

总结一句话,java 中 基本数据类型的取值范围,引用类型的数据,相当于c中的指针,以及各进制之间的相互转换和灵活的引用,以及定制自己想要的任意进制数据类型。

更多关于android相关内容感兴趣的读者可查看本站专题:《android数据库操作技巧总结》、《android编程之activity操作技巧总结》、《android文件操作技巧汇总》、《android编程开发之sd卡操作方法汇总》、《android开发入门与进阶教程》、《android资源操作技巧汇总》、《android视图view技巧总结》及《android控件用法总结

希望本文所述对大家android程序设计有所帮助。