Введение
В этом практическом занятии мы научимся кодировать и декодировать данные в формате Base64 на Java с использованием класса java.util.Base64 и библиотеки Apache Commons.
Создайте новый Java-файл
В этом шаге вы создадите новый Java-файл. Откройте терминал и выполните следующую команду, чтобы создать новый Java-файл:
touch ~/project/Base64Encoding.java
Эта команда создаст новый файл с именем Base64Encoding.java внутри каталога ~/project. Вы можете использовать любое предпочтительное имя, но убедитесь, что оно заканчивается на .java.
Базовое кодирование и декодирование
В этом шаге мы узнаем о основной кодировке и декодировке.
- Основной кодировщик использует алфавит Base64 для кодирования и декодирования.
- Он не добавляет никаких разделителей строк в закодированную строку.
- Мы будем использовать метод
getEncoder(), который возвращает простой Base64.Encoder. - Затем мы будем использовать метод
encodeToString()для кодирования строки.
Для декодирования закодированной строки мы будем использовать Base64.Decoder, возвращаемый методом getDecoder().
- Мы будем использовать метод
decode()декодера.
Используйте следующий код для кодирования и декодирования строки:
import java.util.Base64;
public class Base64Encoding {
public static void main(String[] args) {
String strToEncode = "Hello World";
byte[] bytesToEncode = strToEncode.getBytes(); // преобразуем строку в массив байтов
// Кодирование
String encodedStr = Base64.getEncoder().encodeToString(bytesToEncode);
System.out.println("Encoded String: " + encodedStr);
// Декодирование
byte[] decodedByteArr = Base64.getDecoder().decode(encodedStr);
String decodedStr = new String(decodedByteArr);
System.out.println("Decoded String: " + decodedStr);
}
}
Выполните следующую команду в терминале для компиляции и запуска кода:
javac Base64Encoding.java && java Base64Encoding
Base64-кодирование без дополнения
В предыдущем шаге мы увидели, что кодирование добавляет символы дополнения ( = ) в конце закодированной строки. В этом шаге мы узнаем, как кодировать без символов дополнения.
Используйте следующий код для кодирования строки без дополнения:
import java.util.Base64;
public class Base64Encoding {
public static void main(String[] args) {
String strToEncode = "Java";
byte[] bytesToEncode = strToEncode.getBytes(); // преобразуем строку в массив байтов
// Кодирование без дополнения
String encodedStr = Base64.getEncoder().withoutPadding().encodeToString(bytesToEncode);
System.out.println("Encoded String: " + encodedStr);
}
}
Выполните следующую команду в терминале для компиляции и запуска кода:
javac Base64Encoding.java && java Base64Encoding
Безопасное кодирование и декодирование для URL и имен файлов
В этом шаге мы узнаем о URL- и безопасном кодировании и декодировании имен файлов.
Класс Base64 обрабатывает URL-кодирование и декодирование с использованием URL- и безопасного Base64-алфавита.
- Мы будем использовать метод
getUrlEncoder(), чтобы получить URL-кодировщик Base64. - Затем мы будем использовать метод
encodeToString(), как мы делали в предыдущем разделе.
Аналогично у нас есть метод getUrlDecoder(), который возвращает URL-декодер.
- Мы можем использовать метод
decode()с этим декодером для декодирования.
Используйте следующий код для кодирования и декодирования URL:
import java.util.Base64;
public class Base64Encoding {
public static void main(String[] args) {
String urlToEncode = "https://go.java/?intcmp=gojava-banner-java-com";
// Кодирование
String encodedUrl = Base64.getUrlEncoder().encodeToString(urlToEncode.getBytes());
System.out.println("Encoded URL: " + encodedUrl);
// Декодирование
byte[] decodedUrlBytes = Base64.getUrlDecoder().decode(encodedUrl);
String decodedUrl = new String(decodedUrlBytes);
System.out.print("Decoded URL: " + decodedUrl);
}
}
Выполните следующую команду в терминале для компиляции и запуска кода:
javac Base64Encoding.java && java Base64Encoding
Кодирование и декодирование MIME
В этом шаге мы узнаем о MIME-кодировании и декодировании.
- Класс Base64 использует Base64-алфавит для своих операций кодирования и декодирования.
- В закодированном выводе каждая строка содержит максимум 76 символов.
- Каждая строка заканчивается возвратом каретки( \r ), за которым следует перевод строки( \n ) в качестве разделителя строк.
Для кодирования мы можем использовать методы getMimeEncoder() и encodeToString().
Для декодирования мы будем использовать метод getMimeDecoder() для получения декодера, а затем метод decode().
Используйте следующий код для кодирования и декодирования данных MIME:
import java.util.Base64;
import java.util.UUID;
public class Base64Encoding {
public static void main(String[] args) {
// Создание MIME-инпута для кодирования
StringBuilder sb = new StringBuilder();
for (int i = 0; i < 10; ++i) {
sb.append(UUID.randomUUID().toString());
}
// Кодирование
byte[] bytes = sb.toString().getBytes();
String mimeEncodedStr = Base64.getMimeEncoder().encodeToString(bytes);
System.out.println("Encoded String: " + mimeEncodedStr);
// Декодирование
byte[] mimeDecodedBytes = Base64.getMimeDecoder().decode(mimeEncodedStr);
String mimeDecodedStr = new String(mimeDecodedBytes);
}
}
Выполните следующую команду в терминале для компиляции и запуска кода:
javac Base64Encoding.java && java Base64Encoding
Использование библиотеки Apache Commons
В этом шаге мы узнаем, как использовать библиотеку Apache Commons для кодирования и декодирования данных Base64.
Библиотека Apache Commons предоставляет класс Base64 внутри пакета org.apache.commons.codec.binary.
- Этот класс содержит пять различных конструкторов для различных схем кодирования.
- После создания экземпляра Base64 мы можем использовать методы
encode()иdecode()для байтов строки для выполнения кодирования и декодирования.
Используйте следующий код для кодирования и декодирования строки с использованием класса Base64 Apache Commons:
import org.apache.commons.codec.binary.Base64;
public class Base64Encoding {
public static void main(String[] args) {
Base64 base64 = new Base64();
// Кодирование
String strToEncode = "Hello World";
byte[] encodedBytes = base64.encode(strToEncode.getBytes());
String encodedStr = new String(encodedBytes);
System.out.println("Encoded String: " + encodedStr);
// Декодирование
byte[] decodedByteArr = base64.decode(encodedStr.getBytes());
String decodedStr = new String(decodedByteArr);
System.out.println("Decoded String: " + decodedStr);
// Прямое доступ к API с использованием статических методов encodeBase64() и decodeBase64()
String strToEncode2 = "Hello World";
String encodedStr2 = new String(Base64.encodeBase64(strToEncode.getBytes()));
String decodedStr2 = new String(Base64.decodeBase64(encodedStr.getBytes()));
}
}
Выполните следующую команду в терминале для компиляции и запуска кода:
javac -cp commons-codec-1.15.jar Base64Encoding.java && java -cp commons-codec-1.15.jar:. Base64Encoding
Примечание: Чтобы запустить этот код, вам нужно скачать и импортировать .jar-файл библиотеки Apache Commons Codec в класс-путь. В команде выше мы добавили -cp commons-codec-1.15.jar, чтобы указать класс-путь библиотеки.
Резюме
В этом практическом занятии мы узнали, как кодировать и декодировать данные Base64 в Java с использованием класса java.util.Base64 и библиотеки Apache Commons. Мы рассмотрели три различных схемы кодирования и декодирования Base64 - Basic, URL и безопасные имена файлов, а также MIME.



