Muszę zakodować niektóre dane w kodowaniu Base64 w Javie. Jak mogę to zrobić? Jak nazywa się klasa udostępniająca koder Base64?
Próbowałem skorzystać z sun.misc.BASE64Encoder
klasy, ale bez powodzenia. Mam następujący wiersz kodu Java 7:
wr.write(new sun.misc.BASE64Encoder().encode(buf));
Używam Eclipse. Zaćmienie zaznacza tę linię jako błąd. Zaimportowałem wymagane biblioteki:
import sun.misc.BASE64Encoder;
import sun.misc.BASE64Decoder;
Ale znowu oba są wyświetlane jako błędy. Znalazłem tutaj podobny post .
Użyłem Apache Commons jako rozwiązania sugerowanego przez:
import org.apache.commons.*;
i importowanie plików JAR pobranych z: http://commons.apache.org/codec/
Ale problem nadal istnieje. Zaćmienie nadal pokazuje wspomniane wcześniej błędy. Co powinienem zrobić?
sun.**
Odpowiedzi:
Musisz zmienić import swojej klasy:
A następnie zmień klasę, aby korzystała z klasy Base64.
Oto przykładowy kod:
Przeczytaj, dlaczego nie powinieneś używać pakietów sun. * .
Aktualizacja (16.12.2016)
Możesz teraz używać
java.util.Base64
z Javą 8. Najpierw zaimportuj go w zwykły sposób:Następnie użyj metod statycznych Base64 w następujący sposób:
Jeśli chcesz bezpośrednio zakodować ciąg i uzyskać wynik jako zakodowany ciąg, możesz użyć tego:
Aby uzyskać więcej informacji, zobacz dokumentację Java dla Base64 .
źródło
Skorzystaj z nigdy nie spóźnionej klasy Java 8, aby dołączyć do zabawy:
java.util.Base64
źródło
W Javie 8 można to zrobić jako: Base64.getEncoder (). EncodeToString (string.getBytes (StandardCharsets.UTF_8))
Oto krótki, samodzielny kompletny przykład:
Wynik:
źródło
java.nio.charset.StandardCharsets
. Zmienię swoją odpowiedź. Zobacz stackoverflow.com/questions/1684040/…Możesz także dokonać konwersji przy użyciu kodowania Base64. Aby to zrobić, możesz użyć
javax.xml.bind.DatatypeConverter#printBase64Binary
metody.Na przykład:
źródło
setDatatypeConverter()
metoda (którą następnie należy wywołać dla dostawców JAXB).Google Guava to kolejny wybór do kodowania i dekodowania danych Base64:
Konfiguracja POM:
Przykładowy kod:
źródło
Zaćmienie wyświetla błąd / ostrzeżenie, ponieważ próbujesz użyć klas wewnętrznych, które są specyficzne dla dostawcy JDK, a nie są częścią publicznego interfejsu API. Jakarta Commons zapewnia własną implementację kodeków base64, które oczywiście znajdują się w innym pakiecie. Usuń te importy i pozwól Eclipse zaimportować dla ciebie odpowiednie klasy Commons.
źródło
Base64
worg.apache.commons.codec.binary
? Czy w tym kontekście jest to już Apache Commons ?Aby to przekonwertować, potrzebujesz kodera i dekodera, który otrzymasz od Base64Coder - kodera / dekodera Base64 typu open source w Javie . Potrzebny będzie plik Base64Coder.java .
Teraz, aby uzyskać dostęp do tej klasy zgodnie z wymaganiami, będziesz potrzebować klasy poniżej:
W Androidzie możesz przekonwertować mapę bitową na Base64 w celu przesłania jej na serwer lub usługę internetową.
Ten „encodedImage” to tekstowa reprezentacja twojego obrazu. Możesz użyć tego do celów przesyłania lub do wyświetlania bezpośrednio na stronie HTML, jak poniżej ( odniesienie ):
Dokumentacja: http://dwij.co.in/java-base64-image-encoder
źródło
W przypadku Java 6-7 najlepszą opcją jest pożyczenie kodu z repozytorium Androida. Nie ma zależności.
https://github.com/android/platform_frameworks_base/blob/master/core/java/android/util/Base64.java
źródło
Oto moje dwa centy ... Java 8 zawiera własną implementację Base64 . Znalazłem jednak jedną nieco niepokojącą różnicę. Aby to zilustrować, podam przykładowy kod:
Moje opakowanie kodeka:
Klasa testowa:
WYNIK:
Zauważ, że tekst zakodowany w Apache zawiera dodatkowe znaki końca linii (białe spacje) na końcu. Dlatego też, aby mój kodek mógł uzyskać ten sam wynik niezależnie od implementacji Base64, musiałem wywołać
trim()
tekst zakodowany w Apache. W moim przypadku po prostu dodałem wyżej wymienione wywołanie metody do mojego kodeka wapacheDecode()
następujący sposób:Po wprowadzeniu tej zmiany oczekiwałem od wyników:
WNIOSEK : Jeśli chcesz przełączyć się z Apache Base64 na Java, musisz:
Jeśli przełączysz się bez wykonania tych kroków, najprawdopodobniej wystąpią problemy. W ten sposób dokonałem tego odkrycia.
źródło
W systemie Android użyj statycznych metod klasy narzędzia android.util.Base64 . Dokumentacja, o której mowa, mówi, że klasa Base64 została dodana na poziomie API 8 ( Android 2.2 (Froyo)).
źródło
Apache Commons ma niezłą implementację Base64. Możesz to zrobić po prostu:
Więcej informacji na temat kodowania base64 można znaleźć w kodowaniu Base64 przy użyciu Java i JavaScript .
źródło
Jeśli używasz Spring Framework co najmniej w wersji 4.1, możesz użyć klasy org.springframework.util.Base64Utils :
Będzie delegować do Base64, Apache Commons Codec lub JAXB DatatypeConverter w Javie 8, w zależności od tego, co jest dostępne.
źródło
Prosty przykład z Javą 8:
źródło
W Javie 7 kodowałem tę metodę
źródło
Jeśli utkniesz w starszej wersji Java niż 8, ale już korzystasz z AWS SDK dla Java , możesz użyć com.amazonaws.util.Base64 .
źródło
Próbowałem z następującym fragmentem kodu. Działa dobrze. :-)
źródło
źródło