Base64 Encoding in CLIPS

Our first program demonstrates base64 encoding and decoding. 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 supports 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 exception, 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("Decoding failed: " + e.getMessage());
        }
    }
}

Java provides built-in support for base64 encoding/decoding through the java.util.Base64 class.

To run the program, compile and execute it using the javac and java commands:

$ 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() for standard base64 encoding and decoding, and Base64.getUrlEncoder() and Base64.getUrlDecoder() for URL-safe base64 encoding and decoding.

The encodeToString() method is used to encode byte arrays to base64 strings, and decode() is used to decode base64 strings back to byte arrays. We convert between strings and byte arrays using String.getBytes() and the String constructor that takes a byte array.

Note that in Java, decoding an invalid base64 string will throw an IllegalArgumentException, which we catch in a try-catch block. This is different from the error handling approach used in the original example.