Saya perlu menyandikan beberapa data dalam penyandian Base64 di Jawa. Bagaimana aku melakukan itu? Apa nama kelas yang menyediakan encoder Base64?
Saya mencoba menggunakan sun.misc.BASE64Encoder
kelas, tetapi tidak berhasil. Saya memiliki baris kode Java 7 berikut:
wr.write(new sun.misc.BASE64Encoder().encode(buf));
Saya menggunakan Eclipse. Eclipse menandai baris ini sebagai kesalahan. Saya mengimpor perpustakaan yang diperlukan:
import sun.misc.BASE64Encoder;
import sun.misc.BASE64Decoder;
Tetapi sekali lagi, keduanya ditampilkan sebagai kesalahan. Saya menemukan pos serupa di sini .
Saya menggunakan Apache Commons sebagai solusi yang disarankan dengan memasukkan:
import org.apache.commons.*;
dan mengimpor file JAR yang diunduh dari: http://commons.apache.org/codec/
Tapi masalahnya masih ada. Eclipse masih menunjukkan kesalahan yang disebutkan sebelumnya. Apa yang harus saya lakukan?
sun.**
Jawaban:
Anda perlu mengubah impor kelas Anda:
Dan kemudian ubah kelas Anda untuk menggunakan kelas Base64.
Berikut beberapa contoh kode:
Kemudian baca mengapa Anda tidak harus menggunakan paket sun. * .
Pembaruan (2016-12-16)
Anda sekarang dapat menggunakan
java.util.Base64
dengan Java 8. Pertama, impor seperti biasa:Kemudian gunakan metode statis Base64 sebagai berikut:
Jika Anda ingin menyandikan string secara langsung dan mendapatkan hasilnya sebagai string yang disandikan, Anda dapat menggunakan ini:
Lihat dokumentasi Java untuk Base64 untuk lebih lanjut.
sumber
Gunakan kelas Java 8 yang tidak pernah terlambat untuk bergabung di kelas bersenang-senang:
java.util.Base64
sumber
Di Java 8 dapat dilakukan sebagai: Base64.getEncoder (). EncodeToString (string.getBytes (StandardCharsets.UTF_8))
Berikut adalah contoh lengkap singkat dan lengkap:
Keluaran:
sumber
java.nio.charset.StandardCharsets
. Saya akan mengedit jawaban saya. Lihat stackoverflow.com/questions/1684040/…Anda juga dapat mengonversi menggunakan pengkodean Base64. Untuk melakukan ini, Anda dapat menggunakan
javax.xml.bind.DatatypeConverter#printBase64Binary
metode ini.Sebagai contoh:
sumber
setDatatypeConverter()
metode (yang kemudian harus dipanggil untuk penyedia JAXB).Google Guava adalah pilihan lain untuk menyandikan dan mendekode data Base64:
Konfigurasi POM:
Kode sampel:
sumber
Eclipse memberi Anda kesalahan / peringatan karena Anda mencoba menggunakan kelas internal yang khusus untuk vendor JDK dan bukan bagian dari API publik. Jakarta Commons menyediakan implementasi sendiri dari base64 codec, yang tentu saja berada dalam paket yang berbeda. Hapus impor itu dan biarkan Eclipse mengimpor kelas Commons yang tepat untuk Anda.
sumber
Base64
diorg.apache.commons.codec.binary
? Apakah sekarang Apache Commons untuk konteks ini?Untuk mengonversinya, Anda memerlukan encoder & decoder yang akan Anda dapatkan dari Base64Coder - encoder / decoder Base64 sumber terbuka di Jawa . Ini adalah file Base64Coder.java yang Anda perlukan.
Sekarang untuk mengakses kelas ini sesuai kebutuhan Anda, Anda akan memerlukan kelas di bawah ini:
Di Android Anda dapat mengonversi bitmap Anda ke Base64 untuk diunggah ke server atau layanan web.
"EncodedImage" ini adalah representasi teks dari gambar Anda. Anda dapat menggunakan ini untuk tujuan mengunggah atau untuk memutar langsung ke halaman HTML seperti di bawah ini ( referensi ):
Dokumentasi: http://dwij.co.in/java-base64-image-encoder
sumber
Untuk Java 6 -7, opsi terbaik adalah meminjam kode dari repositori Android. Tidak memiliki dependensi.
https://github.com/android/platform_frameworks_base/blob/master/core/java/android/util/Base64.java
sumber
Berikut adalah dua sen saya ... Java 8 memang mengandung implementasi Base64 sendiri . Namun, saya menemukan satu perbedaan yang sedikit mengganggu. Sebagai ilustrasi, saya akan memberikan contoh kode:
Pembungkus codec saya:
Kelas Tes:
KELUARAN:
Perhatikan bahwa teks yang disandikan Apache berisi jeda baris tambahan (spasi putih) di bagian akhir. Oleh karena itu, agar codec saya menghasilkan hasil yang sama terlepas dari implementasi Base64, saya harus menelepon
trim()
teks yang disandikan Apache. Dalam kasus saya, saya cukup menambahkan pemanggilan metode yang disebutkan di atas ke codec sayaapacheDecode()
sebagai berikut:Setelah perubahan ini dibuat, hasilnya adalah apa yang saya harapkan dimulai dengan:
KESIMPULAN : Jika Anda ingin beralih dari Apache Base64 ke Java, Anda harus:
Jika Anda beralih tanpa mengikuti langkah-langkah ini, kemungkinan besar Anda akan mengalami masalah. Begitulah cara saya membuat penemuan ini.
sumber
Di Android, gunakan metode statis dari kelas utilitas android.util.Base64 . Dokumentasi yang direferensikan mengatakan bahwa kelas Base64 ditambahkan di API level 8 ( Android 2.2 (Froyo)).
sumber
Apache Commons memiliki implementasi Base64 yang bagus. Anda dapat melakukan ini hanya dengan:
Anda dapat menemukan detail lebih lanjut tentang pengkodean base64 di pengkodean Base64 menggunakan Java dan JavaScript .
sumber
Jika Anda menggunakan Spring Framework setidaknya versi 4.1, Anda dapat menggunakan kelas org.springframework.util.Base64Utils :
Ini akan mendelegasikan ke Java 8's Base64, Apache Commons Codec, atau JAXB DatatypeConverter, tergantung pada apa yang tersedia.
sumber
Contoh sederhana dengan Java 8:
sumber
Di Java 7 saya memberi kode metode ini
sumber
Jika Anda terjebak pada versi Java yang lebih lama dari 8 tetapi sudah menggunakan AWS SDK untuk Java , Anda dapat menggunakan com.amazonaws.util.Base64 .
sumber
Saya mencoba dengan cuplikan kode berikut. Itu bekerja dengan baik. :-)
sumber
sumber