J’ai une image qui est codées en Base64. Quelle est la meilleure façon de décoder qu’en Java ? Si tout va bien, en utilisant seulement les bibliothèques incluses avec Sun Java 6.
Réponses
Trop de publicités?Comme de Java 8, il est officiellement prise en charge de l'API pour Base64 d'encodage et de décodage. Dans le temps, ce sera probablement le choix par défaut.
L'API comprend la classe java.util.Base64
et de ses classes imbriquées. Il prend en charge trois saveurs différentes: de base, URL coffre-fort, et le MIME.
Exemple de code à l'aide de la "base" d'encodage:
import java.util.Base64;
byte[] bytes = "Hello, World!".getBytes("UTF-8");
String encoded = Base64.getEncoder().encodeToString(bytes);
byte[] decoded = Base64.getDecoder().decode(encoded);
La documentation pour l' java.util.Base64
inclut plusieurs méthodes pour la configuration des codeurs et décodeurs, et pour l'utilisation de différentes classes d'entrées et de sorties (byte tableaux, chaînes de caractères, ByteBuffers, java.io cours d'eau).
Comme le v6, Java SE est livré avec JAXB. javax.xml.bind.DatatypeConverter
a des méthodes statiques qui font de cette facile. Voir parseBase64Binary()
et printBase64Binary()
.
Voici un exemple de travail en utilisant Apache Commons codec:
Maven / repo sbt : communes-codec, codec communes, 1,8.
Pas besoin d'utiliser des communes-le Soleil est livré à un encoder en base64 avec Java. Vous pouvez l'importer en tant que tel:
import sun.misc.BASE64Decoder;
Et puis l'utiliser comme ceci:
BASE64Decoder decoder = new BASE64Decoder();
byte[] decodedBytes = decoder.decodeBuffer(encodedBytes);
Où encodedBytes
soit une java.lang.String
ou java.io.InputStream
. Méfiez-vous cependant que l' sun.*
les classes ne sont pas "officiellement pris en charge" par le Soleil.
EDIT: Qui savait que ce serait le plus controversé de la réponse, je n'avais jamais post? Je sais que le soleil.* les paquets ne sont pas pris en charge ou de la garantie de continuer à exister, et je ne sais à propos de Communes et de l'utiliser tout le temps. Toutefois, l'affiche a demandé pour une classe qui a été "inclus avec Sun Java 6," et c'est ce que j'essayais de répondre. Je suis d'accord que Commons est la meilleure façon d'aller en général.
EDIT 2: Comme amir75 points ci-après, Java 6+ est livré avec JAXB, qui contient la prise en charge code de codage/décodage en Base64. Veuillez voir Jeremy Ross réponse ci-dessous.
Plus précisément dans les Communes de Codec: classe `` à ou