code: @TargetApi(Build.VERSION_CODES.GINGERBREAD)
      public static Identifier fromBytes(byte[] bytes, int start, int end, boolean littleEndian) {
          if (bytes == null) {
              throw new NullPointerException("Identifiers cannot be constructed from null pointers but \"bytes\" is null.");
          }
          if (start < 0 || start > bytes.length) {
              throw new ArrayIndexOutOfBoundsException("start < 0 || start > bytes.length");
          }
          if (end > bytes.length) {
              throw new ArrayIndexOutOfBoundsException("end > bytes.length");
          }
          if (start > end) {
              throw new IllegalArgumentException("start > end");
          }
  
          byte[] byteRange = Arrays.copyOfRange(bytes, start, end);
          if (littleEndian) {
              reverseArray(byteRange);
          }
          return new Identifier(byteRange);
      }
docs: Creates an Identifier from the specified byte array.
  @param bytes array to copy from
  @param start the start index, inclusive
  @param end the end index, exclusive
  @param littleEndian whether the bytes are ordered in little endian
  @return a new Identifier
  @throws java.lang.NullPointerException <code>bytes</code> must not be <code>null</code>
  @throws java.lang.ArrayIndexOutOfBoundsException start or end are outside the bounds of the array
  @throws java.lang.IllegalArgumentException start is larger than end