code: public String fromByteArray(byte[] bytes, int offset, int length) {
      java.util.Objects.requireNonNull(bytes, "bytes");
      Objects.validArgument(offset >= 0, "offset must be equal or greater than zero");
      Objects.validArgument(length > 0, "length must be greater than zero");
      Objects.validArgument(offset + length <= bytes.length
          , "(offset + length) must be less than %s", bytes.length);
      if (byteSeparator != null && byteSeparator.length() > 0) {
        return fromByteArrayInternal(bytes, offset, length, byteSeparator);
      } else {
        return fromByteArrayInternal(bytes, offset, length);
      }
    }
docs: Returns a hexadecimal string representation of {@code length} bytes of {@code bytes}
  starting at offset {@code offset}.
  
  @param bytes a bytes to convert
  @param offset start offset in the bytes
  @param length maximum number of bytes to use
  @return a hexadecimal string representation of each bytes of {@code bytes}