Кодирование как Base64 в Java
Мне нужно закодировать некоторые данные в кодировке Base64 в Java. Как мне это сделать? Как называется класс, который предоставляет кодировщик Base64?
Я пытался использовать sun.misc.BASE64Encoder класс, но безуспешно. У меня есть следующая строка кода Java 7:
sun.misc.BASE64Encoder
wr.write(new sun.misc.BASE64Encoder().encode(buf));
Я использую Eclipse. Eclipse помечает эту строку как ошибку. Я импортировал необходимые библиотеки:
import sun.misc.BASE64Encoder;import sun.misc.BASE64Decoder;
Но опять же, оба они отображаются как ошибки. Я нашел похожий пост здесь.
Я использовал Apache Commons в качестве решения, предложенного путем включения:
import org.apache.commons.*;
и импорт файлов JAR, загруженных с: http://commons.apache.org/codec /
Но проблема все еще существует. Eclipse по-прежнему показывает ошибки, упомянутые ранее. Что мне делать?
Переведено автоматически
Ответ 1
Вам нужно изменить импорт вашего класса:
import org.apache.commons.codec.binary.Base64;
А затем измените свой класс, чтобы использовать класс Base64.
Вот несколько примеров кода:
byte[] encodedBytes = Base64.encodeBase64("Test".getBytes());System.out.println("encodedBytes " + new String(encodedBytes));byte[] decodedBytes = Base64.decodeBase64(encodedBytes);System.out.println("decodedBytes " + new String(decodedBytes));
Затем прочтите, почему вам не следует использовать sun.* пакеты.
Теперь вы можете использовать java.util.Base64 с Java 8. Сначала импортируйте его, как вы обычно делаете:
java.util.Base64
import java.util.Base64;
Затем используйте статические методы Base64 следующим образом:
byte[] encodedBytes = Base64.getEncoder().encode("Test".getBytes());System.out.println("encodedBytes " + new String(encodedBytes));byte[] decodedBytes = Base64.getDecoder().decode(encodedBytes);System.out.println("decodedBytes " + new String(decodedBytes));
Если вы хотите напрямую закодировать строку и получить результат в виде закодированной строки, вы можете использовать это:
String encodeBytes = Base64.getEncoder().encodeToString((userName + ":" + password).getBytes());
Подробнее смотрите документацию Java для Base64.
Ответ 2
Используйте класс Java 8 "Никогда не поздно присоединиться к веселью": java.util.Base64
new String(Base64.getEncoder().encode(bytes));
Ответ 3
В Java 8 это может быть сделано следующим образом: Base64.getEncoder().encodeToString(string.getBytes(StandardCharsets.UTF_8))
Base64.getEncoder().encodeToString(string.getBytes(StandardCharsets.UTF_8))
Вот краткий, самодостаточный полный пример:
import java.nio.charset.StandardCharsets;import java.util.Base64;public class Temp { public static void main(String... args) throws Exception { final String s = "old crow medicine show"; final byte[] authBytes = s.getBytes(StandardCharsets.UTF_8); final String encoded = Base64.getEncoder().encodeToString(authBytes); System.out.println(s + " => " + encoded); }}
Вывод:
old crow medicine show => b2xkIGNyb3cgbWVkaWNpbmUgc2hvdw==
Ответ 4
Вы также можете конвертировать, используя кодировку Base64. Для этого вы можете использовать javax.xml.bind.DatatypeConverter#printBase64Binary метод.
javax.xml.bind.DatatypeConverter#printBase64Binary
Например:
byte[] salt = new byte[] { 50, 111, 8, 53, 86, 35, -19, -47 };System.out.println(DatatypeConverter.printBase64Binary(salt));