Base64 Encoding in Mercury

Our program demonstrates base64 encoding and decoding in Java. Here’s the full source code:

import java.util.Base64;

public class Base64Encoding {
    public static void main(String[] args) {
        // Here's the string we'll encode/decode.
        String data = "abc123!?$*&()'-=@~";

        // Java provides both standard and URL-compatible base64.
        // Here's how to encode using the standard encoder.
        String sEnc = Base64.getEncoder().encodeToString(data.getBytes());
        System.out.println(sEnc);

        // Decoding may throw an IllegalArgumentException, which you can catch
        // if you don't already know the input to be well-formed.
        try {
            byte[] sDec = Base64.getDecoder().decode(sEnc);
            System.out.println(new String(sDec));
        } catch (IllegalArgumentException e) {
            System.out.println("Decoding failed: " + e.getMessage());
        }
        System.out.println();

        // This encodes/decodes using a URL-compatible base64 format.
        String uEnc = Base64.getUrlEncoder().encodeToString(data.getBytes());
        System.out.println(uEnc);
        try {
            byte[] uDec = Base64.getUrlDecoder().decode(uEnc);
            System.out.println(new String(uDec));
        } catch (IllegalArgumentException e) {
            System.out.println("URL decoding failed: " + e.getMessage());
        }
    }
}

Java provides built-in support for base64 encoding/decoding through the java.util.Base64 class. This class offers both standard and URL-compatible base64 encoders and decoders.

To run the program, compile and execute it:

$ javac Base64Encoding.java
$ java Base64Encoding
YWJjMTIzIT8kKiYoKSctPUB+
abc123!?$*&()'-=@~

YWJjMTIzIT8kKiYoKSctPUB-
abc123!?$*&()'-=@~

The string encodes to slightly different values with the standard and URL base64 encoders (trailing + vs -) but they both decode to the original string as desired.

In Java, we use the Base64.getEncoder() and Base64.getDecoder() methods for standard base64 encoding and decoding. For URL-safe base64, we use Base64.getUrlEncoder() and Base64.getUrlDecoder().

The encodeToString() method is used to encode a byte array to a base64 string, while decode() is used to decode a base64 string back to a byte array.

Note that in Java, we need to explicitly convert between strings and byte arrays using getBytes() and the String constructor.

Also, unlike in some other languages, Java’s base64 decoder throws an IllegalArgumentException if the input is not properly formatted. It’s a good practice to catch this exception when decoding user input or data from untrusted sources.