Android中Parcel用法詳解_Android

來源:互聯網
上載者:User

本文執行個體講述了Android中Parcel用法。分享給大家供大家參考,具體如下:

Android 中Parcel 的使用,他是一個儲存基礎資料型別 (Elementary Data Type)和引用資料類型的容器,在andorid 中通過IBinder來綁定資料在進程間傳遞資料。

Parcel parcel = Parcel.obtain();// 擷取一個Parcel 對象

下面就可以對其進行方法進行操作了,createXXX(),wirteXXX(),readXXX(),
其中dataPosition(),返回當前Parcel 當前Object Storage Service資料的位移量,而setDataPosition(),設定當前Parcel 對象的位移量,方便讀取parcel 中的資料,可問題就出在我讀取出來的資料要麼是空(null),要麼永遠是第一個位移量處的值,儲存和讀取資料的。Parcel採用什麼機制實現的,是以什麼形式的儲存的,然後我才能任意對其操作,讀取目標資料。

基礎資料型別 (Elementary Data Type)的取值範圍:

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這樣的資料。。。

由此我們可以推斷出,無論他儲存的是基礎資料型別 (Elementary Data Type)或引用資料類型的變數,都是以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 為基本的容器,依次儲存寫入的資料,基本和引用(其實引用的也是有多個基礎資料型別 (Elementary Data Type)組合而成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 中 基礎資料型別 (Elementary Data Type)的取值範圍,參考型別的資料,相當於c中的指標,以及各進位之間的相互轉換和靈活的引用,以及定製自己想要的任意進位資料類型。

更多關於Android相關內容感興趣的讀者可查看本站專題:《Android資料庫操作技巧總結》、《Android編程之activity操作技巧總結》、《Android檔案操作技巧匯總》、《Android編程開發之SD卡操作方法匯總》、《Android開發入門與進階教程》、《Android資源操作技巧匯總》、《Android視圖View技巧總結》及《Android控制項用法總結》

希望本文所述對大家Android程式設計有所協助。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.