protected byte[] pad(byte in[], int padLen)
    {
        if(padLen == 0)
            return in;
        int inlen = in.length;
        int outlen = inlen;
        int rem = inlen % padLen;
        if(rem > 0)
            outlen = inlen + (padLen - rem);
        byte out[] = new byte[outlen];
        for(int xx = 0; xx < inlen; xx++)
            out[xx] = in[xx];        return out;
    }

解决方案 »

  1.   

    代码很好懂。不过代码具体体现的算法要认真读过才能明白。貌似是一种byte数组的扩充算法。
    接受一个byte数组和一个代表扩充长度的整数作为参数,返回一个包含原数组数据但长度可能会扩充的新数组。算法的核心是确定新数组的长度,具体算法是:如果扩充参数padLen为0,则不扩充,直接返回原数组;
    否则,对原数组长度和扩充参数padLen求模,如果模大于0,则新数组的长度是原数组长度+扩充参数padLen-求得的模,否则和原数则相同。
    最后将原数组的数据一次拷贝到新数组,并返回新数组。不过这个算法值得改进,1. 模为0的情况和padLen参数为0的情况时相同的,可以作相同处理;2. 拷贝数组宜用System.arrayCopy;3. 可读性需加强。我的改进版本是:protected byte[] pad(byte in[], int padLen) { 
      if (padLen == 0 || in.length % padLen == 0)
        return in;
      byte[] out = new byte[in.length + padLen - in.length % padLen];
      System.arraycopy(in, 0, out, 0, in.length);
      return out;
    }