371 votes

encodage base64 en Java

J'utilise Eclipse. J'ai la ligne de code suivante:

wr.write(new sun.misc.BASE64Encoder().encode(buf));

Eclipse marque de cette ligne d'erreur. - Je importer les bibliothèques requises;

import sun.misc.BASE64Encoder;
import sun.misc.BASE64Decoder;

Mais encore une fois, les deux ont montré que les erreurs. J'ai trouvé un poste similaire ici: importation de soleil.misc.BASE64Encoder eu d'erreur dans Eclipse

J'ai utilisé l'Apache Commons comme la solution propose en tapant:

import org.apache.commons.*;

et d'importer les fichiers JAR téléchargé à partir de: http://commons.apache.org/codec/

Mais le problème existe toujours. Eclipse montrant le mentionné précédemment lignes comme des erreurs. S'il vous plaît, informer.

703voto

Frank Points 5808

Vous devez modifier l'importation de votre classe.

probablement quelque chose comme ça:

 import org.apache.commons.codec.binary.Base64;
 

Et changez ensuite votre classe pour utiliser la classe BASE64.

voici quelques exemples de code:

 byte[] encodedBytes = Base64.encodeBase64("Test".getBytes());
System.out.println("encodedBytes " + new String(encodedBytes));
byte[] decodedBytes = Base64.decodeBase64(encodedBytes);
System.out.println("decodedBytes " + new String(decodedBytes));
 

Lisez ensuite pourquoi vous ne devriez pas utiliser les packages sun. * .

255voto

bratan Points 574

Utilisez la classe jamais trop tardive de Java 8 pour vous joindre à vous-même: java.util.Base64

68voto

StinePike Points 20501

vous pouvez également convertir en utilisant l’encodage base64. pour ce faire, vous pouvez utiliser la méthode javax.xml.bind.DatatypeConverter.printBase64Binary

Par exemple:

 byte[] salt = new byte[] { 50, 111, 8, 53, 86, 35, -19, -47 };
System.out.println(DatatypeConverter.printBase64Binary(salt));
 

12voto

Marko Topolnik Points 77257

Eclipse vous envoie une erreur / un avertissement parce que 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 entendu dans un paquet différent. Supprimez ces importations et laissez Eclipse importer les classes Commons appropriées pour vous.

10voto

GaneshBhosale Points 243

Pour convertir ce vous avez besoin de Codeur Et Décodeur dont vous aurez obtenir à partir de http://www.source-code.biz/base64coder/java/. C'est le Fichier Base64Coder.java vous en aurez besoin.

Maintenant pour avoir accès à cette classe selon vos besoins, vous aurez besoin de la classe ci-dessous:

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.InputStream;
import java.io.IOException;
import java.io.OutputStream;

public class Base64 {

 public static void main(String args[]) throws IOException {
  /*
   * if (args.length != 2) {System.out.println(
   * "Command line parameters: inputFileName outputFileName");
   * System.exit(9); } encodeFile(args[0], args[1]);
   */
  File sourceImage = new File("back3.png");
  File sourceImage64 = new File("back3.txt");
  File destImage = new File("back4.png");
  encodeFile(sourceImage, sourceImage64);
  decodeFile(sourceImage64, destImage);
 }

 private static void encodeFile(File inputFile, File outputFile) throws IOException {
  BufferedInputStream in = null;
  BufferedWriter out = null;
  try {
   in = new BufferedInputStream(new FileInputStream(inputFile));
   out = new BufferedWriter(new FileWriter(outputFile));
   encodeStream(in, out);
   out.flush();
  } finally {
   if (in != null)
    in.close();
   if (out != null)
    out.close();
  }
 }

 private static void encodeStream(InputStream in, BufferedWriter out) throws IOException {
  int lineLength = 72;
  byte[] buf = new byte[lineLength / 4 * 3];
  while (true) {
   int len = in.read(buf);
   if (len <= 0)
    break;
   out.write(Base64Coder.encode(buf, 0, len));
   out.newLine();
  }
 }

 static String encodeArray(byte[] in) throws IOException {
  StringBuffer out = new StringBuffer();
  out.append(Base64Coder.encode(in, 0, in.length));
  return out.toString();
 }

 static byte[] decodeArray(String in) throws IOException {
  byte[] buf = Base64Coder.decodeLines(in);
  return buf;
 }

 private static void decodeFile(File inputFile, File outputFile) throws IOException {
  BufferedReader in = null;
  BufferedOutputStream out = null;
  try {
   in = new BufferedReader(new FileReader(inputFile));
   out = new BufferedOutputStream(new FileOutputStream(outputFile));
   decodeStream(in, out);
   out.flush();
  } finally {
   if (in != null)
    in.close();
   if (out != null)
    out.close();
  }
 }

 private static void decodeStream(BufferedReader in, OutputStream out) throws IOException {
  while (true) {
   String s = in.readLine();
   if (s == null)
    break;
   byte[] buf = Base64Coder.decodeLines(s);
   out.write(buf);
  }
 }
}

Dans Android, vous pouvez convertir une image Bitmap en Base64 pour le Téléchargement sur le Serveur de Web Service.

Bitmap bmImage = //Data
ByteArrayOutputStream baos = new ByteArrayOutputStream();
bmImage.compress(Bitmap.CompressFormat.JPEG, 100, baos);
byte[] imageData = baos.toByteArray();
String encodedImage = Base64.encodeArray(imageData);

Cette "encodedImage" est le texte de la représentation de votre Image. Vous pouvez utiliser soit pour le téléchargement de but ou pour l'affichage directement dans la Page HTML comme ci-dessous (Référence):

<img alt="" src="data:image/png;base64,<?php echo $encodedImage; ?>" width="100px" />
<img alt="" src="data:image/png;base64,/9j/4AAQ...........1f/9k=" width="100px" />

Documentation: http://dwij.co.in/java-base64-image-encoder

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