Як перетворити байтовий масив в Base64 на Java?


120

Гаразд, я знаю, як це зробити в C #.

Це так просто, як:

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

Як я можу це зробити на Java?

Відповіді:


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 Codec .

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

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 є статичними, тому вам не потрібно створювати новий об’єкт. Потім: байт [] data = Base64.decode (base64str); достатньо.
Ернесто Кампоермосо

15

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

import android.util.Base64

...

Base64.encodeToString(bytes, Base64.DEFAULT);

7

У випадку, якщо ви використовуєте Spring Framework разом з java, є простий шлях.

  1. Імпортуйте наступне.

    імпорт org.springframework.util.Base64Utils;
  2. Перетворити так.

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

    Для декодування можна використовувати метод decodeToString класу Base64Utils.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.