Base64 Encoding Decoding
suggest changeOccasionally you will find the need to encode binary data as a base64-encoded string.
For this we can use the DatatypeConverter
class from the javax.xml.bind
package:
import javax.xml.bind.DatatypeConverter; import java.util.Arrays; // arbitrary binary data specified as a byte array byte[] binaryData = "some arbitrary data".getBytes("UTF-8"); // convert the binary data to the base64-encoded string String encodedData = DatatypeConverter.printBase64Binary(binaryData); // encodedData is now "c29tZSBhcmJpdHJhcnkgZGF0YQ==" // convert the base64-encoded string back to a byte array byte[] decodedData = DatatypeConverter.parseBase64Binary(encodedData); // assert that the original data and the decoded data are equal assert Arrays.equals(binaryData, decodedData);
Apache commons-codec
Alternatively, we can use Base64
from Apache commons-codec.
import org.apache.commons.codec.binary.Base64; // your blob of binary as a byte array byte[] blob = "someBinaryData".getBytes(); // use the Base64 class to encode String binaryAsAString = Base64.encodeBase64String(blob); // use the Base64 class to decode byte[] blob2 = Base64.decodeBase64(binaryAsAString); // assert that the two blobs are equal System.out.println("Equal : " + Boolean.toString(Arrays.equals(blob, blob2)));
If you inspect this program wile running, you will see that someBinaryData
encodes to c29tZUJpbmFyeURhdGE=
, a very managable UTF-8 String object.
—
Details for the same can be found at Base64
// encode with padding String encoded = Base64.getEncoder().encodeToString(someByteArray); // encode without padding String encoded = Base64.getEncoder().withoutPadding().encodeToString(someByteArray); // decode a String byte [] barr = Base64.getDecoder().decode(encoded);
Found a mistake? Have a question or improvement idea?
Let me know.
Table Of Contents