Base64 編碼解碼
有時你會發現需要將二進位制資料編碼為 base64 編碼的字串。
為此,我們可以使用 javax.xml.bind
包中的 DatatypeConverter
類 :
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
或者,我們可以使用 Apache commons-codec 中的 Base64
。
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)));
如果你檢查這個程式執行,你會看到 someBinaryData
編碼為 c29tZUJpbmFyeURhdGE=
,一個非常可管理的 UTF-8 字串物件。
Version >= Java SE 8
可以在 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);