Android中Parcel的分析以及使用(3)

      巧用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、  读取复杂对象时: 对象匹配时,返回当前偏移位置的该对象;

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wygjpy.html