public int construct(byte[] byteArrDest, int iDestPos)
  {
    int iOffset = iDestPos;    if (byteArrDDUData == null)
    {
      byteArrDest[iOffset] = 0;
      iOffset += 1;
    }
    else
    {
      int iLen = byteArrDDUData.length;
      byteArrDest[iOffset] = (byte) iLen;
      iOffset += 1;
      System.arraycopy(byteArrDDUData, 0, byteArrDest, iOffset, iLen);
      iOffset += iLen;
    }    return iOffset;
  }

解决方案 »

  1.   

    注:
      /**
       * <p>构造函数</p>
       * <p>用于数据单元解析时</p>
       */
       * <p>构造</p>
       * @param byteArrDest 目标数组
       * @param iDestPos 目标数组起始位置
       * @return 目标数组的当前位置
       */
      

  2.   

    There is an instance array variable called byteArrDDUData.This method will copy all data from byteArrDDUData to another given destination array at the given offset position.If byteArrDDUData is null, then only insert 0 to the destination array.
    if byteArrDDUData contains some data, then insert data length first, followed by all data.The method returns the updated offset from which some new data can be inserted later.
      

  3.   

    高手z_lping(Schemer)大人
    可不可以给我讲讲 iOffset += 1;是什么意思腻?
      

  4.   

    不算难吧,大概就是拷贝一个数组到新数组。这个函数传了一个offset位,实现对拷贝位的控制
      

  5.   

    iOffset += 1;is the same asiOffset = iOffset + 1;We also have -=, *=, /=, ... many other short form operators.You'd better read java book carefully.
      

  6.   

    byteArrDest:   |       iDestPos          |     iDestPos+1 -- iDestPos+iLen  |
                   |   byteArrDDUData的长度  |        byteArrDDUData的数据      | 
    返回iDestPos+iLen+1作为下次copy的iDestPos
      

  7.   

    高手 d8111()你真神了
    我不得不把这个贴出来了
    我很纳闷,你怎么知道的呢
    那下面这个呢是不是和上面那段正相反呢
    /**
       * <p>解析</p>
       * @param byteArrSrc 源数组
       * @param iSrcPos 源数组的起始位置
       * @return 源数组的当前位置
       */
    public int parse(byte[] byteArrSrc, int iSrcPos)
      {
        int iOffset = iSrcPos;    byteArrDDUData = null;    if (iOffset < byteArrSrc.length)
        {
          int iLen = DataConversion.unsignedByte2Int(byteArrSrc[iOffset]);
          iOffset += 1;
          if (iLen > 0)
          //if (iLen > 0 && (iOffset + iLen) <= byteArrSrc.length)
          {
            byteArrDDUData = new byte[iLen];
            System.arraycopy(byteArrSrc, iOffset, byteArrDDUData, 0, iLen);
            iOffset += iLen;
          }
        }
        return iOffset;
      }
      

  8.   

    就是把byteArrDDUData数组 的数据全部添加到byteArrDest数组的后面,并且返回byteArrDest数组的最后一个位子(方便下一次添加或者得到byteArrDest数组的长度)
      

  9.   

    z_lping(Schemer)大人我知道是这个是自增一
    我是问它在整个代码中是起什么作用呢
      

  10.   

    wshsm() 大人您是不是说return iOffset返回的是拷贝后数组的最后一个元素的位置????
      

  11.   

    The data length is inserted first. It might be 0 or some other value.Since one element is inserted in the destination array, the following data should be inserted from next offset, which is iOffset+1.
      

  12.   

    byteArrDest[iOffset] = (byte) iLen;的意思我还是不懂
    怎么也想不明白啊?
    它是干吗用的呢
    各位老大
      

  13.   

    z_lping(Schemer) 你的意思是数组iOffset的位置是存放byteArrDDUData的长度的么
      

  14.   

    因为byteArrDest中有一个字节是保存后面数据长度的,在construct方法中先向byteArrDest里装长度信息,再装里面的内容,所以在装内容前要位置要+1个
    后面的parse方法也是一样的
      

  15.   

    piaopiao11() 高手 我明白你的意思了:
    iOffset += 1;是保存后面数据长度;
    iOffset += iLen;是装数据里面的内容;
    对么?您说句话把:>
      

  16.   

    谢zephyr_cc()哦 我才看明白,呵呵:P
      

  17.   

    对,解析时刚好反过来,通过读iOffset位置的的字节获取长度,在根据长度信息获取应该提取的内容。
      

  18.   

    OK!!piaopiao11() 
    很清晰,我明白了