本文实例讲述了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 parcel分析,Android中Parcel用法详解相关推荐

  1. Python中self用法详解

    Python中self用法详解 https://blog.csdn.net/CLHugh/article/details/75000104 首页 博客 学院 下载 图文课 论坛 APP 问答 商城 V ...

  2. sql语句中exists用法详解

    文章目录 一.语法说明 exists: not exists: 二.常用示例说明 1.查询a表在b表中存在数据 2.查询a表在b表中不存在数据 3.查询时间最新记录 4.exists替代distinc ...

  3. pdo mysql limit_PHP mysql中limit用法详解(代码示例)

    在MySQL中,LIMIT子句与SELECT语句一起使用,以限制结果集中的行数.LIMIT子句接受一个或两个offset和count的参数.这两个参数的值都可以是零或正整数. offset:用于指定要 ...

  4. php 配置 error_reporting,PHP中error_reporting()用法详解 技术分享

    在php中error_reporting函数有什么作用? error_reporting([ int $level ] ) - 设置应该报告何种 PHP 错误. 该函数能够在运行时设置 error_r ...

  5. mysql increment_mysql中auto_increment用法详解

    在mysql中AUTO_INCREMENT类型的属性用于为一个表中记录自动生成ID功能,也就是会自动自增一个ID了,如现在是1下次会自动是2了,就这么简单,下面来看mysql中auto_increme ...

  6. 【 Python 中 int 用法详解】(转载)

    Python 中 int 用法详解 欢迎转载,转载请注明出处! 文章目录 Python 中 int 用法详解 0. 参考资料 1. int 的无参数调用 2. int 接收数字作为参数 3. int ...

  7. Python 中 int 用法详解

    Python 中 int 用法详解 欢迎转载,转载请注明出处! 文章目录 Python 中 int 用法详解 0. 参考资料 1. int 的无参数调用 2. int 接收数字作为参数 3. int ...

  8. c 语言中set的用法,C++中set用法详解

    1.关于set C++ STL 之所以得到广泛的赞誉,也被很多人使用,不只是提供了像vector, string, list等方便的容器,更重要的是STL封装了许多复杂的数据结构算法和大量常用数据结构 ...

  9. Oracle数据库之rownum,ORACLE数据库中Rownum用法详解

    ORACLE 中ROWNUM用法总结! 对于 Oracle 的 rownum 问题,很多资料都说不支持>,>=,=,between...and,只能用以上符号(,& gt;=,=, ...

  10. html语言 input,input标签(HTML中input用法详解)

    input标签 Firstname: Lastname: HTML中input用法详解 1.type 格式:type="文本的类型" 当type设置为text时,text属性表示一 ...

最新文章

  1. AngularJS $eval $parse
  2. 学习旧岛小程序 (2) 自定义组件
  3. php h2,微信连接失败:一直返回h2Moved/h2 (终于搞定了)
  4. 产品经理必知必会的SQL
  5. Ant Design Landing 产品首页的设计神器
  6. idea IDE 常用快捷键记录
  7. 数组图形的一些数学操作 有可能考试会遇到哦
  8. access计算机二级改工号,Access新手来看:如何更改表/窗体/报表...得名字
  9. delphi7 获取dll的类_上传quot;定时任务quot;获取系统权限
  10. yourphp添加KindEditor编辑器
  11. Protoc与GRPC的使用
  12. 视频教程-【直通华为HCNA/HCNP系列R篇7】可靠性功能原理及配置与管理-华为认证
  13. 捷配浅谈PCB叠层的概念、设计原则
  14. 用Python机器人监听微信群聊
  15. 华大开发板SW失效,无法下载程序
  16. 易臣OA系统如何解决会议管理不规范的问题
  17. 贪心算法、分治算法和动态规划的区别
  18. spring 常见面试题
  19. 什么是TSO(tidb配置tso)
  20. 基于 HTML+CSS+JS 的石头剪刀布游戏

热门文章

  1. Redis Cluster内存爆满
  2. (读书笔记)蔡康永的说话之道
  3. 香橙派python编程_香橙派4B Python3.7安装OpenCV
  4. CF755F PolandBall and Gifts
  5. Typo3 CVE201912747 反序列化漏洞分析
  6. OSPF 理论二 (赤诚善良 永远热爱)
  7. PHP微信公众号开发之:获得和缓存access_token,原理及代码
  8. dns劫持教您dns被劫持如何修复、dns劫持如何修复
  9. 50元打造双网卡负载均衡服务器(Network Load Balancing)
  10. ADC模数转换器 动态范围,精确度bit和分辨率最低辨别电压多少V