538 Stimmen

Base64-Daten in Java dekodieren

Ich habe ein Bild, das Base64-kodiert ist. Wie kann ich das am besten in Java dekodieren? Hoffentlich nur mit den Bibliotheken, die in Sun Java 6 enthalten sind.

1 Stimmen

Unabhängig davon, welche Art von Anwendung Sie verwenden (Experiment oder nicht), ist es so einfach wie das Erstellen einer einzigen Base64.java-Datei in Ihrem utils-Paket mit dem Code hier: migbase64.sourceforge.net Schauen Sie sich die Leistungstabellen an und bemerken Sie den Unterschied: 4-5 mal so schnell.

0 Stimmen

ZU IHRER INFORMATION: GEP 135 schlägt vor, eine standardisierte, auffindbare API für die Java-Plattform einzuführen.

0 Stimmen

466voto

Andrea Punkte 11428

Ab dem Java 8 gibt es eine offiziell unterstützte API für die Base64-Kodierung und -Dekodierung. Mit der Zeit wird dies wahrscheinlich die Standardwahl werden.

Die API enthält die Klasse java.util.Base64 und ihre verschachtelten Klassen. Es unterstützt drei verschiedene Varianten: Basic, URL Safe und MIME.

Beispielcode mit der "einfachen" Kodierung:

import java.util.Base64;

byte[] bytes = "Hello, World!".getBytes("UTF-8");
String encoded = Base64.getEncoder().encodeToString(bytes);
byte[] decoded = Base64.getDecoder().decode(encoded);
String decodedStr = new String(decoded, StandardCharsets.UTF_8);

En Dokumentation für java.util.Base64 enthält mehrere weitere Methoden zur Konfiguration von Encodern und Decodern und zur Verwendung verschiedener Klassen als Ein- und Ausgänge (Byte-Arrays, Strings, ByteBuffers, java.io-Streams).

425voto

Jeremy Ross Punkte 10793

Seit Version 6 wird Java SE mit JAXB ausgeliefert. javax.xml.bind.DatatypeConverter verfügt über statische Methoden, die dies vereinfachen. Siehe parseBase64Binary() y printBase64Binary() .

UPDATE : JAXB wird nicht mehr mit Java ausgeliefert (seit Java 11). Wenn JAXB für Ihr Projekt erforderlich ist, müssen Sie die entsprechenden Bibliotheken über Ihr Abhängigkeitsverwaltungssystem, z. B. Maven, konfigurieren. Wenn Sie den Compiler benötigen ( xjc.exe ) müssen Sie diese ebenfalls separat herunterladen.

104voto

MattK Punkte 10147

Sie brauchen keine Commons zu verwenden - Sun liefert einen base64-Encoder mit Java. Sie können ihn als solchen importieren:

import sun.misc.BASE64Decoder;

Und dann verwenden Sie es so:

BASE64Decoder decoder = new BASE64Decoder();
byte[] decodedBytes = decoder.decodeBuffer(encodedBytes);

Wo encodedBytes ist entweder ein java.lang.String oder eine java.io.InputStream . Beachten Sie nur, dass die sun.* Klassen werden von Sun nicht "offiziell unterstützt".

EDITAR: Wer hätte gedacht, dass dies die kontroverseste Antwort sein würde, die ich je veröffentlichen würde? Ich weiß, dass sun.*-Pakete nicht unterstützt werden oder garantiert weiter existieren, und ich kenne Commons und benutze es ständig. Der Poster fragte jedoch nach einer Klasse, die "in Sun Java 6 enthalten" ist, und das wollte ich beantworten. Ich stimme zu, dass Commons im Allgemeinen der beste Weg ist.

EDIT 2: Wie amir75 weiter unten ausführt, wird Java 6+ mit JAXB ausgeliefert, das unterstützten Code zur Codierung/Decodierung von Base64 enthält. Siehe bitte Jeremy Ross' Antwort unten.

60voto

Yuval Adam Punkte 155168

Speziell in Commons Codec : Klasse Base64 a decode(byte[] array) o encode(byte[] array)

37voto

jontro Punkte 9646

Guava verfügt jetzt über eine integrierte Base64-Dekodierung.

Verwenden Sie BaseEncoding.base64().decode()

Für den Umgang mit möglichen Leerzeichen in der Eingabe verwenden Sie

BaseEncoding.base64().decode(CharMatcher.WHITESPACE.removeFrom(...));

参照 diese Diskussion für weitere Informationen

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X