巧用setDataPosition()方法,当我们的parcel对象中只存在某一类型时,我们就可以通过这个方法来快速的读取
所有值。具体方法如下:
[html]
/** * 前提条件,Parcel存在多个类型相同的对象,本例子以10个float对象说明: */ public void readSameType() { Parcel parcel =Parcel.obtain() ; for (int i = 0; i < 10; i++) { parcel.writeDouble(i); Log.i(TAG, "write double ----> " + getParcelInfo()); } //方法一 ,显示设置偏移量 int i = 0; int datasize = parcel.dataSize(); while (i < datasize) { parcel.setDataPosition(i); double fvalue = parcel.readDouble(); Log.i(TAG, " read double is=" + fvalue + ", --->" + getParcelInfo()); i += 8; // double占用字节为 8byte } // 方法二,由于对象的类型一致,我们可以直接利用readXXX()读取值会产生偏移量 // parcel.setDataPosition(0) ; // // while(parcel.dataPosition()<parcel.dataSize()){ // double fvalue = parcel.readDouble(); // Log.i(TAG, " read double is=" + fvalue + ", --->" + getParcelInfo()); // } }由于可能存在读取值的偏差,一个默认的取值规范为:
1、 读取复杂对象时: 对象匹配时,返回当前偏移位置的该对象;