Ich habe ein Bild, das Base64-kodiert ist. Wie kann ich das am besten in Java dekodieren? Hoffentlich nur mit den Bibliotheken, die in Sun Java 6 enthalten sind.
Sie brauchen keine Commons zu verwenden - Sun liefert einen base64-Encoder mit Java. Sie können ihn als solchen importieren:
import sun.misc.BASE64Decoder;
Und dann verwenden Sie ihn wie folgt:
BASE64Decoder decoder = new BASE64Decoder();
byte[] decodedBytes = decoder.decodeBuffer(encodedBytes);
Wobei encodedBytes
entweder ein java.lang.String
oder ein java.io.InputStream
ist. Beachten Sie nur, dass die sun.*
Klassen nicht "offiziell unterstützt" von Sun sind.
EDIT: Wer hätte gedacht, dass dies die umstrittenste Antwort sein würde, die ich jemals posten würde? Ich weiß, dass sun.*-Pakete nicht unterstützt werden oder garantiert weiter existieren, und ich kenne Commons und benutze es ständig. Allerdings hat der Poster nach einer Klasse gefragt, die in Sun Java 6 enthalten ist, und genau das wollte ich beantworten. Ich stimme zu, dass Commons im Allgemeinen der beste Weg ist.
EDIT 2:EDIT 2: Wie amir75 unten anmerkt, wird Java 6+ mit JAXB ausgeliefert, das unterstützten Code zum Kodieren/Dekodieren von Base64 enthält. Siehe dazu Jeremy Ross' Antwort unten.
Speziell in Commons Codec: Klasse Base64
zu decode(byte[] array)
oder encode(byte[] array)
Als Alternative zu sun.misc.BASE64Decoder
oder anderen Bibliotheken, die nicht zum Kerngeschäft gehören, bietet sich javax.mail.internet.MimeUtility.decode()
an.
public static byte[] encode(byte[] b) throws Exception {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
OutputStream b64os = MimeUtility.encode(baos, "base64");
b64os.write(b);
b64os.close();
return baos.toByteArray();
}
public static byte[] decode(byte[] b) throws Exception {
ByteArrayInputStream bais = new ByteArrayInputStream(b);
InputStream b64is = MimeUtility.decode(bais, "base64");
byte[] tmp = new byte[b.length];
int n = b64is.read(tmp);
byte[] res = new byte[n];
System.arraycopy(tmp, 0, res, 0, n);
return res;
}
Link mit vollständigem Code: Enkodieren/Dekodieren in/aus Base64