@Override
    public DecodedInstruction decode(int opcodeUnit, CodeInput in) throws EOFException {
      int elementWidth = in.read();
      int size = in.readInt();

      switch (elementWidth) {
        case 1:
          {
            byte[] array = new byte[size];
            boolean even = true;
            for (int i = 0, value = 0; i < size; i++, even = !even) {
              if (even) {
                value = in.read();
              }
              array[i] = (byte) (value & 0xff);
              value >>= 8;
            }
            return new FillArrayDataPayloadDecodedInstruction(this, opcodeUnit, array);
          }
        case 2:
          {
            short[] array = new short[size];
            for (int i = 0; i < size; i++) {
              array[i] = (short) in.read();
            }
            return new FillArrayDataPayloadDecodedInstruction(this, opcodeUnit, array);
          }
        case 4:
          {
            int[] array = new int[size];
            for (int i = 0; i < size; i++) {
              array[i] = in.readInt();
            }
            return new FillArrayDataPayloadDecodedInstruction(this, opcodeUnit, array);
          }
        case 8:
          {
            long[] array = new long[size];
            for (int i = 0; i < size; i++) {
              array[i] = in.readLong();
            }
            return new FillArrayDataPayloadDecodedInstruction(this, opcodeUnit, array);
          }
        default: // fall out
      }

      throw new DexException("bogus element_width: " + Hex.u2(elementWidth));
    }
Representation of an instruction format, which knows how to decode into and encode from instances
of {@link DecodedInstruction}.
android/android_framework/dex-maker/src/main/java/com/android/dx/io/instructions/InstructionCodec.java