code: public static String encodeBytes(byte[] source, int off, int len, int options) throws java.io.IOException {
          byte[] encoded = encodeBytesToBytes(source, off, len, options);
  
          // Return value according to relevant encoding.
          return new String(encoded, StandardCharsets.US_ASCII);
  
      }
docs: Encodes a byte array into Base64 notation.
  <p>
  Example options:
  
  <pre>
  GZIP: gzip-compresses object before encoding it.
  DO_BREAK_LINES: break lines at 76 characters
  <i>Note: Technically, this makes your encoding non-compliant.</i>
  </pre>
  <p>
  Example: <code>encodeBytes( myData, Base64.GZIP )</code> or
  <p>
  Example: <code>encodeBytes( myData, Base64.GZIP | Base64.DO_BREAK_LINES )</code>
  
  
  <p>
  As of v 2.3, if there is an error with the GZIP stream, the method will throw an java.io.IOException. <b>This is new to
  v2.3!</b> In earlier versions, it just returned a null value, but in retrospect that's a pretty poor way to handle it.
  </p>
  
  
  @param source The data to convert
  @param off Offset in array where conversion should begin
  @param len Length of data to convert
  @param options Specified options
  @return The Base64-encoded data as a String
  @see Base64#GZIP
  @see Base64#DO_BREAK_LINES
  @throws java.io.IOException if there is an error
  @throws NullPointerException if source array is null
  @throws IllegalArgumentException if source array, offset, or length are invalid
  @since 2.0