Android中Parcel用法詳解
本文實(shí)例講述了Android中Parcel用法。分享給大家供大家參考,具體如下:
Android 中Parcel 的使用,他是一個(gè)存儲(chǔ)基本數(shù)據(jù)類型和引用數(shù)據(jù)類型的容器,在andorid 中通過(guò)IBinder來(lái)綁定數(shù)據(jù)在進(jìn)程間傳遞數(shù)據(jù)。
Parcel parcel = Parcel.obtain();// 獲取一個(gè)Parcel 對(duì)象
下面就可以對(duì)其進(jìn)行方法進(jìn)行操作了,createXXX(),wirteXXX(),readXXX(),
其中dataPosition(),返回當(dāng)前Parcel 當(dāng)前對(duì)象存儲(chǔ)數(shù)據(jù)的偏移量,而setDataPosition(),設(shè)置當(dāng)前Parcel 對(duì)象的偏移量,方便讀取parcel 中的數(shù)據(jù),可問(wèn)題就出在我讀取出來(lái)的數(shù)據(jù)要么是空(null),要么永遠(yuǎn)是第一個(gè)偏移量處的值,存儲(chǔ)和讀取數(shù)據(jù)的。Parcel采用什么機(jī)制實(shí)現(xiàn)的,是以什么形式的存儲(chǔ)的,然后我才能任意對(duì)其操作,讀取目標(biāo)數(shù)據(jù)。
基本數(shù)據(jù)類型的取值范圍:
boolean 1bit
short 16bit
int 32bit
long 64bit
float 32bit
double 64bit
char 16bit
byte 8bit
由此我可以猜想,Parcel 32bit 作為基本單位存儲(chǔ)寫(xiě)入的變量,4byte*8=32bit,在內(nèi)存中的引用地址變量是采用16進(jìn)制進(jìn)行編碼,且作為偏移量,即偏移量是4的倍數(shù),0,4,8,12,16,20,24,28,32,36,40,44,48......4*N,
f(x) = 4*y{y>=0&y是自然數(shù)}
我想絕對(duì)不會(huì)出現(xiàn)向偏移量是3,6,9這樣的數(shù)據(jù)。。。
由此我們可以推斷出,無(wú)論他存儲(chǔ)的是基本數(shù)據(jù)類型或引用數(shù)據(jù)類型的變量,都是以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(),每寫(xiě)一次數(shù)據(jù),在32bit的空間里能夠存儲(chǔ)要放入的變量,怎只占一個(gè)偏移量,也就之一動(dòng)4個(gè)位置,而當(dāng)存儲(chǔ)的數(shù)據(jù)如 parcel.writeFloat(1000000000000000000000000000000000000f);他就自動(dòng)往后移動(dòng),
parcel.writeString("a"); parcel.writeString("b"); parcel.writeString("d"); parcel.writeString("c");
和
parcel.writeString("abcd");
的區(qū)別。由此可見(jiàn),他的內(nèi)存的分配原來(lái)是這樣的。
那我怎樣才能把我存進(jìn)去的書(shū)據(jù)依次的去出來(lái)呢?setDataPosition(),設(shè)置parcel 的偏移量,在readXXX(),讀取數(shù)據(jù)
int size = parcel.dataSize(); int i = 0; while (i <= size ) { parcel.setDataPosition(i); int curr_int = parcel.readInt(); i+=4; int j = 0; j++; }
由此可見(jiàn)parcel 寫(xiě)入數(shù)據(jù)是按照32bit 為基本的容器,依次存儲(chǔ)寫(xiě)入的數(shù)據(jù),基本和引用(其實(shí)引用的也是有多個(gè)基本數(shù)據(jù)類型組合而成OBJECTS-屬性|方法),讀取的時(shí)候我們就可以按照這種規(guī)律根據(jù)目標(biāo)數(shù)據(jù)的偏移量的位置(curr_position),以及偏移量的大小(size),,取出已經(jīng)存進(jìn)去的數(shù)據(jù)了
int i = curr_position; while (i <= size ) { parcel.setDataPosition(i); int curr_int = parcel.readXXXt(); i+=4; int j = 0; j++; }
這樣就ok 了
他的createXXX()方法現(xiàn)在沒(méi)用,用了在說(shuō)吧!
總結(jié)一句話,Java 中 基本數(shù)據(jù)類型的取值范圍,引用類型的數(shù)據(jù),相當(dāng)于c中的指針,以及各進(jìn)制之間的相互轉(zhuǎn)換和靈活的引用,以及定制自己想要的任意進(jìn)制數(shù)據(jù)類型。
更多關(guān)于Android相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Android數(shù)據(jù)庫(kù)操作技巧總結(jié)》、《Android編程之a(chǎn)ctivity操作技巧總結(jié)》、《Android文件操作技巧匯總》、《Android編程開(kāi)發(fā)之SD卡操作方法匯總》、《Android開(kāi)發(fā)入門(mén)與進(jìn)階教程》、《Android資源操作技巧匯總》、《Android視圖View技巧總結(jié)》及《Android控件用法總結(jié)》
希望本文所述對(duì)大家Android程序設(shè)計(jì)有所幫助。
相關(guān)文章
Android Bitmap和Drawable相互轉(zhuǎn)換的簡(jiǎn)單代碼
Android Bitmap和Drawable相互轉(zhuǎn)換的簡(jiǎn)單代碼,需要的朋友可以參考一下2013-05-05android 開(kāi)發(fā)教程之日歷項(xiàng)目實(shí)踐(三)
決定開(kāi)始學(xué)習(xí) Android 平臺(tái)下的軟件開(kāi)發(fā),以日歷作為實(shí)踐項(xiàng)目,進(jìn)行一周后,基本完成,有需要的朋友可以參考下2013-01-01TextView顯示系統(tǒng)時(shí)間(時(shí)鐘功能帶秒針變化
用System.currentTimeMillis()可以獲取系統(tǒng)當(dāng)前的時(shí)間,我們可以開(kāi)啟一個(gè)線程,然后通過(guò)handler發(fā)消息,來(lái)實(shí)時(shí)的更新TextView上顯示的系統(tǒng)時(shí)間,可以做一個(gè)時(shí)鐘的功能2013-11-11Android 自定義組件衛(wèi)星菜單的實(shí)現(xiàn)
這篇文章主要介紹了Android 自定義組件衛(wèi)星菜單的實(shí)現(xiàn)的相關(guān)資料,需要的朋友可以參考下2017-07-07解析Java的迭代器中的fast-fail錯(cuò)誤檢測(cè)機(jī)制
這篇文章主要介紹了Java的迭代器中的fast-fail錯(cuò)誤檢測(cè)機(jī)制,需要的朋友可以參考下2016-02-02Android 判斷屏幕開(kāi)關(guān)狀態(tài)方式總結(jié)
這篇文章主要介紹了Android 判斷屏幕開(kāi)關(guān)狀態(tài)方式總結(jié)的相關(guān)資料,需要的朋友可以參考下2016-10-10總結(jié)安卓(Android)中常用的跳轉(zhuǎn)工具
在大家日常開(kāi)發(fā)的時(shí)候經(jīng)常會(huì)用到各式各樣的跳轉(zhuǎn),如跳轉(zhuǎn)到QQ、微信聊天界面、跳轉(zhuǎn)到聯(lián)系人界面或者跳轉(zhuǎn)到瀏覽器和照相機(jī)等等之類的,本文將常用到的一些跳轉(zhuǎn)集合到一起,這樣更方便大家以后使用,有需要的小伙伴們可以參考借鑒。2016-08-08Android 三種動(dòng)畫(huà)詳解及簡(jiǎn)單實(shí)例
這篇文章主要介紹了Android 三種動(dòng)畫(huà)詳解及簡(jiǎn)單實(shí)例的相關(guān)資料,需要的朋友可以參考下2017-04-04Android 實(shí)現(xiàn)通知消息水平播放、無(wú)限循環(huán)效果
Android 實(shí)現(xiàn)通知消息水平播放、無(wú)限循環(huán)效果非常常見(jiàn),今天小編給大家分享實(shí)例代碼感興趣的朋友參考下吧2017-08-08