Ich muss einige Daten in der Base64-Codierung in Java codieren. Wie mache ich das? Wie heißt die Klasse, die einen Base64-Encoder bereitstellt?
Ich habe versucht, die sun.misc.BASE64Encoder
Klasse zu benutzen , ohne Erfolg. Ich habe die folgende Zeile von Java 7-Code:
wr.write(new sun.misc.BASE64Encoder().encode(buf));
Ich benutze Eclipse. Eclipse markiert diese Zeile als Fehler. Ich habe die erforderlichen Bibliotheken importiert:
import sun.misc.BASE64Encoder;
import sun.misc.BASE64Decoder;
Aber auch hier werden beide als Fehler angezeigt. Ich habe hier einen ähnlichen Beitrag gefunden .
Ich habe Apache Commons als Lösung verwendet, indem ich Folgendes vorgeschlagen habe:
import org.apache.commons.*;
und Importieren der JAR-Dateien, die heruntergeladen wurden von: http://commons.apache.org/codec/
Das Problem besteht jedoch weiterhin. Eclipse zeigt weiterhin die zuvor genannten Fehler an. Was sollte ich tun?
sun.**
Antworten:
Sie müssen den Import Ihrer Klasse ändern:
Ändern Sie dann Ihre Klasse, um die Base64-Klasse zu verwenden.
Hier ist ein Beispielcode:
Lesen Sie dann, warum Sie sun. * -Pakete nicht verwenden sollten .
Update (2016-12-16)
Sie können es jetzt
java.util.Base64
mit Java 8 verwenden. Importieren Sie es zunächst wie gewohnt:Verwenden Sie dann die statischen Base64-Methoden wie folgt:
Wenn Sie eine Zeichenfolge direkt codieren und das Ergebnis als codierte Zeichenfolge erhalten möchten, können Sie Folgendes verwenden:
Sehen Informationen finden Java-Dokumentation zu Base64 .
quelle
Verwenden Sie die nie zu spät kommende Java 8-Klasse, um am Spaß teilzunehmen:
java.util.Base64
quelle
In Java 8 kann dies wie folgt erfolgen: Base64.getEncoder (). EncodeToString (string.getBytes (StandardCharsets.UTF_8))
Hier ist ein kurzes, in sich geschlossenes vollständiges Beispiel:
Ausgabe:
quelle
java.nio.charset.StandardCharsets
. Ich werde meine Antwort bearbeiten. Siehe stackoverflow.com/questions/1684040/…Sie können auch mit Base64-Codierung konvertieren. Dazu können Sie die verwenden
javax.xml.bind.DatatypeConverter#printBase64Binary
Methode verwenden.Zum Beispiel:
quelle
setDatatypeConverter()
Methode (die dann für JAXB-Anbieter aufgerufen werden muss).Google Guava ist eine weitere Option zum Codieren und Decodieren von Base64-Daten:
POM-Konfiguration:
Beispielcode:
quelle
Eclipse gibt einen Fehler / eine Warnung aus, da Sie versuchen, interne Klassen zu verwenden, die für einen JDK-Anbieter spezifisch sind und nicht Teil der öffentlichen API sind. Jakarta Commons bietet eine eigene Implementierung von base64-Codecs an, die sich natürlich in einem anderen Paket befinden. Löschen Sie diese Importe und lassen Sie Eclipse die richtigen Commons-Klassen für Sie importieren.
quelle
Base64
inorg.apache.commons.codec.binary
? Ist es jetzt Apache Commons für diesen Kontext?Um dies zu konvertieren, benötigen Sie einen Encoder und Decoder, den Sie von Base64Coder erhalten - einem Open-Source-Base64-Encoder / Decoder in Java . Es ist die Datei Base64Coder.java, die Sie benötigen.
Um nun gemäß Ihren Anforderungen auf diese Klasse zugreifen zu können, benötigen Sie die folgende Klasse:
In Android können Sie Ihre Bitmap zum Hochladen auf einen Server oder Webdienst in Base64 konvertieren.
Dieses "encodedImage" ist eine Textdarstellung Ihres Bildes. Sie können dies entweder zum Hochladen oder zum direkten Anzeigen in eine HTML-Seite wie folgt verwenden ( Referenz ):
Dokumentation: http://dwij.co.in/java-base64-image-encoder
quelle
Für Java 6 -7 ist es am besten, Code aus dem Android-Repository auszuleihen. Es hat keine Abhängigkeiten.
https://github.com/android/platform_frameworks_base/blob/master/core/java/android/util/Base64.java
quelle
Hier sind meine zwei Cent ... Java 8 enthält eine eigene Implementierung von Base64 . Ich fand jedoch einen etwas störenden Unterschied. Zur Veranschaulichung werde ich ein Codebeispiel bereitstellen:
Mein Codec-Wrapper:
Testklasse:
AUSGABE:
Beachten Sie, dass der Apache-codierte Text am Ende zusätzliche Zeilenumbrüche (Leerzeichen) enthält. Daher musste ich
trim()
den Apache-codierten Text aufrufen, damit mein Codec unabhängig von der Base64-Implementierung das gleiche Ergebnis liefert . In meinem Fall habe ich den oben genannten Methodenaufruf einfachapacheDecode()
wie folgt zu meinen Codecs hinzugefügt :Nachdem diese Änderung vorgenommen wurde, erwartete ich zunächst folgende Ergebnisse:
SCHLUSSFOLGERUNG : Wenn Sie von Apache Base64 zu Java wechseln möchten, müssen Sie:
Wenn Sie wechseln, ohne diese Schritte auszuführen, treten höchstwahrscheinlich Probleme auf. So habe ich diese Entdeckung gemacht.
quelle
Verwenden Sie unter Android die statischen Methoden der Dienstprogrammklasse android.util.Base64 . Die Dokumentation, auf die verwiesen wird, besagt, dass die Base64-Klasse in API-Level 8 ( Android 2.2 (Froyo)) hinzugefügt wurde .
quelle
Apache Commons hat eine schöne Implementierung von Base64. Sie können dies so einfach tun wie:
Weitere Informationen zur Base64-Codierung finden Sie unter Base64-Codierung mit Java und JavaScript .
quelle
Wenn Sie Spring Framework mindestens Version 4.1 verwenden, können Sie die Klasse org.springframework.util.Base64Utils verwenden :
Es wird an Java 8 Base64, Apache Commons Codec oder JAXB DatatypeConverter delegiert, je nachdem, was verfügbar ist.
quelle
Einfaches Beispiel mit Java 8:
quelle
In Java 7 habe ich diese Methode codiert
quelle
Wenn Sie an einer früheren Version von Java als 8 festhalten, aber bereits AWS SDK für Java verwenden , können Sie com.amazonaws.util.Base64 verwenden .
quelle
Ich habe es mit dem folgenden Code-Snippet versucht. Es hat gut funktioniert. :-)
quelle
quelle