Android开发中Parcel存储类型和数据容器

更新时间:2023-06-09 20:09:57 阅读: 评论:0

Android开发中Parcel存储类型和数据容器
在android中使⽤Parcel(存储基本数据类型和引⽤数据类型的容器)通过IBinder来绑定,这种⽅法的作⽤是让数据在进程间传递数据,Parcel定位就是轻量级
的⾼效的对象序列化和反序列化机制。
在Framework中有parcel类,源码路径是:
Frameworks/ba/core/java/android/os/Parcel.java
典型的源码⽚断如下:
/
芙蓉楼送辛渐教案Write an integer value into the parcel at the current dataPosition(),
growing dataCapacity() if needed.
上甘岭战役/
public final native void writeInt(int val);
/
Write a long integer value into the parcel at the current dataPosition(),
growing dataCapacity() if needed.
/
public final native void writeLong(long val);
他的⽅法如下:
Parcel parcel = Parcel.obtain();//
获取⼀个Parcel 对象下⾯就可以对其进⾏⽅法进⾏操作了,
createXXX(),wirteXXX(),readXXX(),
其中dataPosition(),返回当前Parcel当前对象存储数据的偏移量,⽽tDataPosition(),设置当前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.w 写⼀次数据,在32bit的空间⾥能够存储要放⼊的变量,怎只占⼀个偏移量,也就之⼀动4个位置。
冬季上班时间
⽽当存储的数据如:parcel.writeFloat(1000000000000000000000000000000000000f);他就⾃动往后移动,
parcel.writeString(“a”);parcel.writeString(“b”);parcel.writeString(“d”);parcel.writeString(“c”);和parcel.writeString(“abcd”); 的区别。
有此可见,他的内存的分配原来是这样的。那我怎样才能把我存进去的数据依次的去出来呢?tDataPosition(),设置parcel的偏移量,在readXXX(),读取数据
int size = parcel.dataSize();
int i = 0;
while (i <= size )
{
parcel.tDataPosition(i);
int curr_int = adInt();
i+=4;
int j = 0;
j++;
}
由此可见parcel写⼊数据是按照32bit 为基本的容器,依次存储写⼊的数据,基本和引⽤(其实引⽤的也是有多个基本数据类型组合⽽成OBJECTS-属性|⽅法),读取的时候我们就可以按照这种规律根据⽬标数据的偏移量的位置(curr_position),以及偏移量的⼤⼩(size),取出已经存进去的数据了。
光身女人
int i = curr_position;
while (i <= size )
{
parcel.tDataPosition(i);
int curr_int = adXXXt();
i+=4;
int j = 0;
j++;
}
最后提醒⼀句,在java中基本数据类型的取值范围,引⽤类型的数据,相当于c中的指针,以及各进制之间的相互转换和灵活的引⽤,以及定制⾃⼰想要的任意进制数据类型。译成串⾏化、序列化……,其作⽤是能将数据对象存⼊字节流当中,在需要时重新⽣成对象。主要应⽤是利⽤外部存储设备保存对象状态,以及通过⽹络传输对象等。

本文发布于:2023-06-09 20:09:57,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/89/1031111.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图