518 votes

Décoder les données Base64 dans Java

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.

438voto

Andrea Points 1328

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).

425voto

Jeremy Ross Points 7484

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().

105voto

Martin Konicek Points 7999

Voici un exemple de travail en utilisant Apache Commons codec:

Maven / repo sbt : communes-codec, codec communes, 1,8.

104voto

MattK Points 7319

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);

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.

57voto

Yuval Adam Points 59423

Plus précisément dans les Communes de Codec: classe `` à ou

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X