Как преобразовать массив байтов в Base64 в Java?

120

Хорошо, я знаю, как это сделать на C #.

Это очень просто:

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

Как я могу сделать это на Java?

Sorantis
источник

Ответы:

226

Java 8+

Кодировать или декодировать байтовые массивы:

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"

Или, если вам просто нужны строки:

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

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

Для получения дополнительной информации см. Base64 .

Java <8

Base64 не поставляется с версиями Java ниже 8. Я рекомендую использовать кодек Apache Commons .

Для прямых байтовых массивов:

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"

Или, если вам просто нужны строки:

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"

весна

Если вы уже работаете над проектом Spring, вы можете найти их org.springframework.util.Base64Utilsкласс более эргономичным:

Для прямых байтовых массивов:

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

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

Или, если вам просто нужны строки:

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

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

Android (с Java <8)

Если вы используете Android SDK до Java 8, лучшим вариантом будет использование пакета android.util.Base64.

Для прямых байтовых массивов:

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

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

Или, если вам просто нужны строки:

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

String decoded = new String(Base64.decode(encoded));
println(decoded)    // Outputs "Hello"
Кори Кляйн
источник
29

Использование:

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

Кодировка преобразуется в Base64

Вам нужно будет сослаться на кодек commons из вашего проекта, чтобы этот код работал.

Для java8 :

import java.util.Base64
Константин Спирин
источник
21
Методы кодирования / декодирования класса Base64 являются статическими, поэтому вам не нужно создавать новый объект. Затем: byte [] data = Base64.decode (base64str); достаточно.
Эрнесто Кампоэрмосо 08
15

Кроме того, для наших друзей по Android (уровень API 8):

import android.util.Base64

...

Base64.encodeToString(bytes, Base64.DEFAULT);
Тон Сной
источник
7

Если вы используете Spring framework вместе с java, есть простой способ.

  1. Импортируйте следующее.

    import org.springframework.util.Base64Utils;
  2. Преобразуйте вот так.

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

    Для декодирования вы можете использовать метод decodeToString класса Base64Utils.

Ихсан Извер
источник