Come posso convertire un array di byte in Base64 in Java?


120

Va bene, so come farlo in C #.

È semplice come:

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

Come posso farlo in Java?

Risposte:


226

Java 8+

Codifica o decodifica array di 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"

O se vuoi solo le stringhe:

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

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

Per altre info, vedi Base64 .

Java <8

Base64 non è fornito in bundle con le versioni Java inferiori alla 8. Consiglio di utilizzare Apache Commons Codec .

Per array di byte diretti:

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"

O se vuoi solo le stringhe:

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"

Primavera

Se stai già lavorando a un progetto Spring, potresti trovare la loro org.springframework.util.Base64Utilsclasse più ergonomica:

Per array di byte diretti:

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

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

O se vuoi solo le stringhe:

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

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

Android (con Java <8)

Se utilizzi Android SDK prima di Java 8, l'opzione migliore è utilizzare il pacchetto android.util.Base64.

Per array di byte diretti:

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

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

O se vuoi solo le stringhe:

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

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

29

Uso:

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

La codifica viene convertita in Base64

Dovresti fare riferimento al codec Common dal tuo progetto affinché quel codice funzioni.

Per java8 :

import java.util.Base64

21
I metodi di codifica / decodifica della classe Base64 sono statici, quindi non è necessario creare un nuovo oggetto. Quindi: byte [] data = Base64.decode (base64str); è abbastanza.
Ernesto Campohermoso

15

Inoltre, per i nostri amici Android (livello API 8):

import android.util.Base64

...

Base64.encodeToString(bytes, Base64.DEFAULT);

7

Nel caso in cui ti capiti di utilizzare il framework Spring insieme a java, c'è un modo semplice per aggirare.

  1. Importa quanto segue.

    import org.springframework.util.Base64Utils;
  2. Converti in questo modo.

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

    Per decodificare è possibile utilizzare il metodo decodeToString della classe Base64Utils.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.