Ik heb een plaatje dat Base64 gecodeerd is. Wat is de beste manier om dat in Java te decoderen? Hopelijk met alleen de bibliotheken die bij Sun Java 6 zitten.
Je hoeft geen commons te gebruiken- Sun levert een base64 encoder met Java. Je kunt het als zodanig importeren:
import sun.misc.BASE64Decoder;
En gebruik het dan als volgt:
BASE64Decoder decoder = new BASE64Decoder();
byte[] decodedBytes = decoder.decodeBuffer(encodedBytes);
Waar encodedBytes
ofwel een java.lang.String
of een java.io.InputStream
is. Let er alleen op dat de sun.*
classes niet "officieel ondersteund" worden door Sun.
EDIT: Wie wist dat dit het meest controversiële antwoord zou zijn dat ik'ooit zou posten? Ik weet dat sun.* packages niet ondersteund worden of gegarandeerd blijven bestaan, en ik weet van Commons en gebruik het de hele tijd. Echter, de poster vroeg naar een class die was "inbegrepen bij Sun Java 6," en dat'is wat ik probeerde te antwoorden. Ik ben het er mee eens dat Commons in het algemeen de beste manier is.
EDIT 2: Zoals amir75 hieronder opmerkt, Java 6+ wordt geleverd met JAXB, dat ondersteunde code bevat om Base64 te coderen/decoderen. Zie Jeremy Ross' antwoord hieronder.
Specifiek in Commons Codec: klasse Base64
naar decode(byte[] array)
of encode(byte[] array)
Als een alternatief voor sun.misc.BASE64Decoder
of niet-kern bibliotheken, kijk naar javax.mail.internet.MimeUtility.decode()
.
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 met volledige code: Encodeer/Decodeer naar/van Base64