code: @edu.umd.cs.findbugs.annotations.SuppressWarnings(value = "DM_DEFAULT_ENCODING")
      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.
          try {
              return new String( encoded, PREFERRED_ENCODING );
          }   // end try
          catch (java.io.UnsupportedEncodingException uue) {
              return new String( encoded );
          }   // end catch
          
      }
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