Bagaimana cara mengubah array byte ke Base64 di Java?


120

Oke, saya tahu bagaimana melakukannya di C #.

Ini sesederhana:

Convert.ToBase64String(byte[])
and Convert.FromBase64String(string) to get byte[] back.

Bagaimana saya bisa melakukan ini di Java?

Jawaban:


226

Java 8+

Encode atau decode array byte:

byte[] encoded = Base64.getEncoder().encode("Hello".getBytes());
println(new String(encoded));   // Outputs "SGVsbG8="

byte[] decoded = Base64.getDecoder().decode(encoded);
println(new String(decoded))    // Outputs "Hello"

Atau jika Anda hanya menginginkan senar:

String encoded = Base64.getEncoder().encodeToString("Hello".getBytes());
println(encoded);   // Outputs "SGVsbG8="

String decoded = new String(Base64.getDecoder().decode(encoded.getBytes()));
println(decoded)    // Outputs "Hello"

Untuk info lebih lanjut, lihat Base64 .

Jawa <8

Base64 tidak dibundel dengan versi Java kurang dari 8. Saya merekomendasikan menggunakan Apache Commons Codec .

Untuk array byte langsung:

Base64 codec = new Base64();
byte[] encoded = codec.encode("Hello".getBytes());
println(new String(encoded));   // Outputs "SGVsbG8="

byte[] decoded = codec.decode(encoded);
println(new String(decoded))    // Outputs "Hello"

Atau jika Anda hanya menginginkan senar:

Base64 codec = new Base64();
String encoded = codec.encodeBase64String("Hello".getBytes());
println(encoded);   // Outputs "SGVsbG8="

String decoded = new String(codec.decodeBase64(encoded));
println(decoded)    // Outputs "Hello"

Musim semi

Jika Anda sudah mengerjakan proyek Musim Semi, Anda mungkin merasa org.springframework.util.Base64Utilskelas mereka lebih ergonomis:

Untuk array byte langsung:

byte[] encoded = Base64Utils.encode("Hello".getBytes());
println(new String(encoded))    // Outputs "SGVsbG8="

byte[] decoded = Base64Utils.decode(encoded);
println(new String(decoded))    // Outputs "Hello"

Atau jika Anda hanya menginginkan senar:

String encoded = Base64Utils.encodeToString("Hello".getBytes());
println(encoded);   // Outputs "SGVsbG8="

String decoded = Base64Utils.decodeFromString(encoded);
println(new String(decoded))    // Outputs "Hello"

Android (dengan Java <8)

Jika Anda menggunakan Android SDK sebelum Java 8 maka pilihan terbaik Anda adalah menggunakan paket android.util.Base64.

Untuk array byte langsung:

byte[] encoded = Base64.encode("Hello".getBytes());
println(new String(encoded))    // Outputs "SGVsbG8="

byte [] decoded = Base64.decode(encoded);
println(new String(decoded))    // Outputs "Hello"

Atau jika Anda hanya menginginkan senar:

String encoded = Base64.encodeToString("Hello".getBytes());
println(encoded);   // Outputs "SGVsbG8="

String decoded = new String(Base64.decode(encoded));
println(decoded)    // Outputs "Hello"

29

Menggunakan:

byte[] data = Base64.encode(base64str);

Pengkodean diubah menjadi Base64

Anda perlu merujuk codec commons dari proyek Anda agar kode itu berfungsi.

Untuk java8 :

import java.util.Base64

21
Metode untuk penyandian / dekode kelas Base64 bersifat statis sehingga Anda tidak perlu membuat objek baru. Kemudian: byte [] data = Base64.decode (base64str); cukup.
Ernesto Campohermoso

15

Selain itu, untuk teman Android kita (API Level 8):

import android.util.Base64

...

Base64.encodeToString(bytes, Base64.DEFAULT);

7

Jika Anda kebetulan menggunakan framework Spring bersama dengan java, ada cara mudah untuk melakukannya.

  1. Impor yang berikut ini.

    import org.springframework.util.Base64Utils;
  2. Ubah seperti ini.

    byte [] bytearr = {0,1,2,3,4};
    String encodedText = Base64Utils.encodeToString (bytearr);
    

    Untuk memecahkan kode Anda dapat menggunakan metode decodeToString dari kelas Base64Utils.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.