J'ai besoin d'encoder certaines données dans l'encodage Base64 en Java. Comment je fais ça? Quel est le nom de la classe qui fournit un encodeur Base64?
J'ai essayé d'utiliser la sun.misc.BASE64Encoder
classe, sans succès. J'ai la ligne suivante de code Java 7:
wr.write(new sun.misc.BASE64Encoder().encode(buf));
J'utilise Eclipse. Eclipse marque cette ligne comme une erreur. J'ai importé les bibliothèques requises:
import sun.misc.BASE64Encoder;
import sun.misc.BASE64Decoder;
Mais encore une fois, les deux sont affichés comme des erreurs. J'ai trouvé un article similaire ici .
J'ai utilisé Apache Commons comme solution suggérée en incluant:
import org.apache.commons.*;
et importation des fichiers JAR téléchargés depuis: http://commons.apache.org/codec/
Mais le problème existe toujours. Eclipse affiche toujours les erreurs mentionnées précédemment. Que devrais-je faire?
sun.**
Réponses:
Vous devez modifier l'importation de votre classe:
Et puis changez votre classe pour utiliser la classe Base64.
Voici un exemple de code:
Lisez ensuite pourquoi vous ne devriez pas utiliser les packages sun. * .
Mise à jour (2016-12-16)
Vous pouvez maintenant l'utiliser
java.util.Base64
avec Java 8. D'abord, importez-le comme vous le faites normalement:Utilisez ensuite les méthodes statiques Base64 comme suit:
Si vous souhaitez directement coder une chaîne et obtenir le résultat sous forme de chaîne codée, vous pouvez utiliser ceci:
Voir la documentation Java pour Base64 pour plus.
la source
Utilisez la classe jamais trop tardive pour participer à l'amusement de Java 8:
java.util.Base64
la source
En Java 8, cela peut être fait comme: Base64.getEncoder (). EncodeToString (string.getBytes (StandardCharsets.UTF_8))
Voici un court exemple complet et autonome:
Production:
la source
java.nio.charset.StandardCharsets
. Je vais modifier ma réponse. Voir stackoverflow.com/questions/1684040/…Vous pouvez également convertir en utilisant l'encodage Base64. Pour ce faire, vous pouvez utiliser le
javax.xml.bind.DatatypeConverter#printBase64Binary
méthode.Par exemple:
la source
setDatatypeConverter()
méthode (qui doit alors être appelée pour les fournisseurs JAXB).Google Guava est un autre choix pour encoder et décoder les données Base64:
Configuration POM:
Exemple de code:
la source
Eclipse vous donne une erreur / un avertissement car vous essayez d'utiliser des classes internes spécifiques à un fournisseur JDK et ne faisant pas partie de l'API publique. Jakarta Commons fournit sa propre implémentation de codecs base64, qui résident bien sûr dans un package différent. Supprimez ces importations et laissez Eclipse importer les classes Commons appropriées pour vous.
la source
Base64
enorg.apache.commons.codec.binary
? Est-ce maintenant Apache Commons dans ce contexte?Pour convertir cela, vous avez besoin d'un encodeur et d'un décodeur que vous obtiendrez de Base64Coder - un encodeur / décodeur Base64 open source en Java . C'est le fichier Base64Coder.java dont vous aurez besoin.
Maintenant, pour accéder à cette classe selon vos besoins, vous aurez besoin de la classe ci-dessous:
Dans Android, vous pouvez convertir votre bitmap en Base64 pour le télécharger sur un serveur ou un service Web.
Cette «encodedImage» est une représentation textuelle de votre image. Vous pouvez l'utiliser pour télécharger ou pour afficher directement dans une page HTML comme ci-dessous ( référence ):
Documentation: http://dwij.co.in/java-base64-image-encoder
la source
Pour Java 6 -7, la meilleure option consiste à emprunter du code à partir du référentiel Android. Il n'a pas de dépendances.
https://github.com/android/platform_frameworks_base/blob/master/core/java/android/util/Base64.java
la source
Voici mes deux cents ... Java 8 contient sa propre implémentation de Base64 . Cependant, j'ai trouvé une différence légèrement inquiétante. Pour illustrer, je vais fournir un exemple de code:
Mon wrapper de codec:
Classe de test:
PRODUCTION:
Notez que le texte codé Apache contient des sauts de ligne supplémentaires (espaces blancs) à la fin. Par conséquent, pour que mon codec donne le même résultat quelle que soit l'implémentation Base64, j'ai dû faire appel
trim()
au texte codé Apache. Dans mon cas, j'ai simplement ajouté l'appel de méthode susmentionné à mon codecapacheDecode()
comme suit:Une fois ce changement effectué, les résultats sont ceux que j'attendais au départ:
CONCLUSION : Si vous souhaitez passer d'Apache Base64 à Java, vous devez:
Si vous passez sans suivre ces étapes, vous rencontrerez très probablement des problèmes. C'est ainsi que j'ai fait cette découverte.
la source
Sur Android, utilisez les méthodes statiques de la classe d'utilitaires android.util.Base64 . La documentation référencée indique que la classe Base64 a été ajoutée dans l'API niveau 8 ( Android 2.2 (Froyo)).
la source
Apache Commons a une belle implémentation de Base64. Vous pouvez le faire aussi simplement que:
Vous pouvez trouver plus de détails sur l'encodage base64 à l'encodage Base64 en utilisant Java et JavaScript .
la source
Si vous utilisez Spring Framework au moins la version 4.1, vous pouvez utiliser la classe org.springframework.util.Base64Utils :
Il sera délégué à Base64 de Java 8, Codec Apache Commons ou JAXB DatatypeConverter, selon ce qui est disponible.
la source
Exemple simple avec Java 8:
la source
Dans Java 7, j'ai codé cette méthode
la source
Si vous êtes bloqué sur une version antérieure de Java à 8 mais que vous utilisez déjà AWS SDK pour Java , vous pouvez utiliser com.amazonaws.util.Base64 .
la source
J'ai essayé avec l'extrait de code suivant. Cela a bien fonctionné. :-)
la source
la source