Como faço para converter uma matriz de bytes em Base64 em Java?

120

Ok, eu sei como fazer isso em C #.

É tão simples como:

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

Como posso fazer isso em Java?

Sorantis
fonte

Respostas:

226

Java 8+

Codifique ou decodifique matrizes de bytes:

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"

Ou se você quiser apenas as strings:

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

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

Para obter mais informações, consulte Base64 .

Java <8

Base64 não é empacotado com versões de Java inferiores a 8. Eu recomendo usar Apache Commons Codec .

Para matrizes de bytes diretos:

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"

Ou se você quiser apenas as strings:

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 você já está trabalhando em um projeto de primavera, pode achar sua org.springframework.util.Base64Utilsclasse mais ergonômica:

Para matrizes de bytes diretos:

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

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

Ou se você quiser apenas as strings:

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

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

Android (com Java <8)

Se você estiver usando o Android SDK antes do Java 8, sua melhor opção é usar o pacote android.util.Base64.

Para matrizes de bytes diretos:

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

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

Ou se você quiser apenas as strings:

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

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

Usar:

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

A codificação é convertida em Base64

Você precisaria fazer referência ao codec comum de seu projeto para que esse código funcione.

Para java8 :

import java.util.Base64
Konstantin Spirin
fonte
21
Os métodos de codificação / decodificação da classe Base64 são estáticos, então você não precisa criar um novo objeto. Então: byte [] data = Base64.decode (base64str); basta.
Ernesto Campohermoso
15

Além disso, para nossos amigos Android (API de nível 8):

import android.util.Base64

...

Base64.encodeToString(bytes, Base64.DEFAULT);
Ton Snoei
fonte
7

Caso você esteja usando o framework Spring junto com o java, existe uma maneira fácil de contornar.

  1. Importe o seguinte.

    import org.springframework.util.Base64Utils;
  2. Converta assim.

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

    Para decodificar, você pode usar o método decodeToString da classe Base64Utils.

Ihsan Izwer
fonte