Έχω μια εικόνα που είναι κωδικοποιημένη με Base64. Ποιος είναι ο καλύτερος τρόπος να την αποκωδικοποιήσω σε Java; Ελπίζω να χρησιμοποιήσω μόνο τις βιβλιοθήκες που περιλαμβάνονται στη Sun Java 6.
Δεν χρειάζεται να χρησιμοποιήσετε το commons - η Sun παρέχει έναν κωδικοποιητή base64 μαζί με τη Java. Μπορείτε να τον εισαγάγετε ως τέτοιο:
import sun.misc.BASE64Decoder;
Και στη συνέχεια να τον χρησιμοποιήσετε ως εξής:
BASE64Decoder decoder = new BASE64Decoder();
byte[] decodedBytes = decoder.decodeBuffer(encodedBytes);
Όπου encodedBytes
είναι είτε ένα java.lang.String
είτε ένα java.io.InputStream
. Απλά προσέξτε ότι οι κλάσεις sun.*
δεν "υποστηρίζονται επίσημα" από τη Sun.
EDIT:Ποιος να το ήξερε ότι αυτή θα ήταν η πιο αμφιλεγόμενη απάντηση που θα έγραφα ποτέ; Γνωρίζω ότι τα πακέτα sun.* δεν υποστηρίζονται ούτε είναι εγγυημένο ότι θα συνεχίσουν να υπάρχουν, και γνωρίζω για το Commons και το χρησιμοποιώ συνεχώς. Ωστόσο, ο αποστολέας ρώτησε για μια κλάση που περιλαμβάνεται στη Sun Java 6 και αυτό προσπαθούσα να απαντήσω. Συμφωνώ ότι το Commons είναι ο καλύτερος τρόπος για να προχωρήσουμε γενικά.
EDIT 2:</b>- Όπως επισημαίνει παρακάτω ο amir75, η Java 6+ συνοδεύεται από το JAXB, το οποίο περιέχει υποστηριζόμενο κώδικα για την κωδικοποίηση/αποκωδικοποίηση της Base64. Παρακαλούμε δείτε την Jeremy Ross' απάντηση παρακάτω.
Συγκεκριμένα στο Commons Codec: κλάση Base64
σε decode(byte[] array)
ή encode(byte[] array)
Ως εναλλακτική λύση για τον sun.misc.BASE64Decoder
ή τις μη βασικές βιβλιοθήκες, δείτε την 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;
}
Σύνδεσμος με πλήρη κώδικα: Κωδικοποίηση/Αποκωδικοποίηση σε/από Base64