Base64 kodlu bir resmim var. Bunu Java'da çözmenin en iyi yolu nedir? Umarım sadece Sun Java 6 ile birlikte gelen kütüphaneleri kullanırım.
Commons kullanmanıza gerek yok - Sun, Java ile birlikte bir base64 kodlayıcı gönderir. Bu şekilde içe aktarabilirsiniz:
import sun.misc.BASE64Decoder;
Ve sonra bu şekilde kullanın:
BASE64Decoder decoder = new BASE64Decoder();
byte[] decodedBytes = decoder.decodeBuffer(encodedBytes);
Burada encodedBytes
ya bir java.lang.String
ya da bir java.io.InputStream
dir. Sadece sun.*
sınıflarının Sun tarafından "resmi olarak desteklenmediğine" dikkat edin.
DÜZENLEME: Bunun şimdiye kadar yayınladığım en tartışmalı cevap olacağını kim bilebilirdi? sun.* paketlerinin desteklenmediğini veya var olmaya devam edeceğinin garanti edilmediğini biliyorum ve Commons'ı biliyorum ve her zaman kullanıyorum. Bununla birlikte, poster sahibi "Sun Java 6'ya dahil olan " bir sınıf istedi ve ben de buna cevap vermeye çalışıyordum. Commons'un genel olarak gidilecek en iyi yol olduğuna katılıyorum.
DÜZENLEME 2: amir75'in aşağıda belirttiği gibi, Java 6+, Base64'ü kodlamak/kodunu çözmek için desteklenen kodu içeren JAXB ile birlikte gelir. Lütfen aşağıdaki Jeremy Ross' cevabına bakın.
Özellikle Commons Codec: class Base64
içinde decode(byte[] array)
veya encode(byte[] array)
sun.misc.BASE64Decoderveya çekirdek olmayan kütüphanelere alternatif olarak,
javax.mail.internet.MimeUtility.decode()`'a bakın.
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;
}
Tam kodlu bağlantı: Encode/Decode to/from Base64