public static void bytesToDoubles___3BI_3DII__(
      MJIEnv env, int clsRef, int baRef, int bOff, int daRef, int dOff, int nDoubles) {
    int imax = dOff + nDoubles;
    int j = bOff;

    for (int i = dOff; i < imax; i++) {
      byte b0 = env.getByteArrayElement(baRef, j++);
      byte b1 = env.getByteArrayElement(baRef, j++);
      byte b2 = env.getByteArrayElement(baRef, j++);
      byte b3 = env.getByteArrayElement(baRef, j++);
      byte b4 = env.getByteArrayElement(baRef, j++);
      byte b5 = env.getByteArrayElement(baRef, j++);
      byte b6 = env.getByteArrayElement(baRef, j++);
      byte b7 = env.getByteArrayElement(baRef, j++);

      long l = 0x00000000000000ff & b7;
      l <<= 8;
      l |= 0x00000000000000ff & b6;
      l <<= 8;
      l |= 0x00000000000000ff & b5;
      l <<= 8;
      l |= 0x00000000000000ff & b4;
      l <<= 8;
      l |= 0x00000000000000ff & b3;
      l <<= 8;
      l |= 0x00000000000000ff & b2;
      l <<= 8;
      l |= 0x00000000000000ff & b1;
      l <<= 8;
      l |= 0x00000000000000ff & b0;

      double d = Double.longBitsToDouble(l);
      env.setDoubleArrayElement(daRef, i, d);
    }
  }
  @MJI
  public int decode___3BII___3C(
      MJIEnv env, int clsObjRef, int bref, int off, int len, FeatureExpr ctx) {

    int cref = env.newCharArray(ctx, len);
    for (int i = 0, j = off; i < len; i++, j++) {
      env.setCharArrayElement(
          ctx,
          cref,
          i,
          env.getByteArrayElement(bref, j)
              .map(
                  new Function<Byte, Character>() {

                    @Override
                    public Character apply(Byte b) {
                      return (char) b.byteValue();
                    }
                  }));
    }

    return cref;
  }