JAVA 8¶
Вопросы¶
- Какие нововведения, появились в Java 8?
- Как сортировать список строк с помощью лямбда-выражения?
- Какова структура лямбда-выражения?
- К каким переменным есть доступ у Лямбда-выражений?
- Что такое ссылки на метод?
- Какие виды ссылок на методы вы знаете?
- Объясните выражение System.out::println.
- Что такое функциональные интерфейсы?
- Для чего нужен функциональный интерфейс BiConsumer<T,U>?
- Для чего нужен функциональный интерфейс BiFunction<T,U,R>?
- Для чего нужен функциональный интерфейс BinaryOperator<T>?
- Для чего нужен функциональный интерфейс BiPredicate<T,U>?
- Для чего нужен функциональный интерфейс BooleanSupplier?
- Для чего нужен функциональный интерфейс Consumer<T>?
- Для чего нужен функциональный интерфейс DoubleBinaryOperator?
- Для чего нужен функциональный интерфейс DoubleConsumer?
- Для чего нужен функциональный интерфейс DoubleFunction<R>?
- Для чего нужен функциональный интерфейс DoublePredicate?
- Для чего нужен функциональный интерфейс DoubleSupplier?
- Для чего нужен функциональный интерфейс DoubleToIntFunction?
- Для чего нужен функциональный интерфейс DoubleToLongFunction?
- Для чего нужен функциональный интерфейс DoubleUnaryOperator?
- Для чего нужен функциональный интерфейс Function<T,R>?
- Для чего нужен функциональный интерфейс IntBinaryOperator?
- Для чего нужен функциональный интерфейс IntConsumer?
- Для чего нужен функциональный интерфейс IntFunction<R>?
- Для чего нужен функциональный интерфейс IntPredicate?
- Для чего нужен функциональный интерфейс IntSupplier?
- Для чего нужен функциональный интерфейс IntToDoubleFunction?
- Для чего нужен функциональный интерфейс IntToLongFunction?
- Для чего нужен функциональный интерфейс IntUnaryOperator?
- Для чего нужен функциональный интерфейс LongBinaryOperator?
- Для чего нужен функциональный интерфейс LongConsumer?
- Для чего нужен функциональный интерфейс LongFunction<R>?
- Для чего нужен функциональный интерфейс LongPredicate?
- Для чего нужен функциональный интерфейс LongSupplier?
- Для чего нужен функциональный интерфейс LongToDoubleFunction?
- Для чего нужен функциональный интерфейс LongToIntFunction?
- Для чего нужен функциональный интерфейс LongUnaryOperator?
- Для чего нужен функциональный интерфейс ObjDoubleConsumer<T>?
- Для чего нужен функциональный интерфейс ObjIntConsumer<T>?
- Для чего нужен функциональный интерфейс ObjLongConsumer<T>?
- Для чего нужен функциональный интерфейс Predicate<T>?
- Для чего нужен функциональный интерфейс Supplier<T>?
- Для чего нужен функциональный интерфейс ToDoubleBiFunction<T,U>?
- Для чего нужен функциональный интерфейс ToDoubleFunction<T>?
- Для чего нужен функциональный интерфейс ToIntBiFunction<T,U>?
- Для чего нужен функциональный интерфейс ToIntFunction<T>?
- Для чего нужен функциональный интерфейс ToLongBiFunction<T,U>?
- Для чего нужен функциональный интерфейс ToLongFunction<T>?
- Для чего нужен функциональный интерфейс UnaryOperator<T>?
- Что такое StringJoiner?
- Что такое default методы?
- Что такое static методы?
- Как вызывать default-метод интерфейса в классе?
- Как вызывать static-метод интерфейса в классе?
- Что такое потоки(stream) в Java 8
- Для чего нужен метод collect Java 8?
- В чем разница между коллекцией(Collection) и потоком(Stream)?
- Для чего предназначен метод forEach в потоках(stream)?
- Как вывести на экран 10 случайных чисел, используя forEach?
- Для чего предназначен метод map в потоках(stream)?
- Как можно вывести на экран уникальные квадраты чисел используя метод map?
- Какова цель метода filter в потоках(stream)?
- Как вывести на экран количество пустых строк с помощью метода filter?
- Для чего предназначен метод limit в потоках(stream)?
- Для чего предназначен метод sorted в потоках(stream)?
- Как вывести на экран 10 случайных чисел в отсортированном порядке в Java 8?
- Параллельная обработка в Java 8?
- Как найти максимальное число в списке Java 8?
- Как найти минимальное число в списке Java 8?
- Как получить сумму всех чисел в списке, используя Java 8?
- Как получить среднее значение всех чисел, в списке, используя Java 8?
- Что такое Optional?
- Что такое Nashorn?
- Что такое jjs в Java 8?
- Что такое LocalDateTime в Java 8?
- Что такое ZonedDateTime в Java 8?
- Как получить текущую дату с использованием time API из Java 8?
- Как добавить 1 неделю к текущей дате с использованием time API?
- Как добавить 1 месяц к текущей дате с использованием time API?
- Как добавить 1 год к текущей дате с использованием time API?
- Как добавить 10 лет к текущей дате с использованием time API?
- Как получить следующий вторник используя time API?
- Как получить вторую субботу текущего месяца используя time API?
- Как получить текущею дату в миллисекундах используя time API?
- Как получить текущею дату по местному времени в миллисекундах используя используя time API?
- Какой класс появился в Java 8 для декодирования данных?
- Какой класс появился в Java 8 для кодирования данных?
- Как создать Base64 декодировщик?
- Как создать Base64 кодировщик?
Ответы¶
Какие нововведения, появились в Java 8?¶
В Java 8 было добавлено много функций, наиболее значимые из них упомянуты ниже:
- Полноценная поддержка лямбда-выражений, которая добавляет
- функциональные возможности обработки данных для Java.
- Ключевое слово default в интерфейсах для поддержки функциональности по умолчанию(интерфейс может иметь реализацию метода по умолчанию).
- Ссылки на методы.
- Функциональные интерфейсы (предикаты, поставщики и т. д.)
- Потоки (stream) для работы с коллекциями
- Новое API для работы с датами
- Nashorn движок JavaScript, разрабатываемый полностью на Java компанией Oracle
Как сортировать список строк с помощью лямбда-выражения?¶
Следующий код сортирует список строк с помощью лямбда-выражения Java 8:
Какова структура лямбда-выражения?¶
Лямбда выражение имеет следующую структуру: (method params) -> {lambda expression body}, где
- method params - список входящих параметров, разделенных запятой(в случаи если параметров больше одного заключаются в скобки).
- оператор "->" - служит разделителем между списком параметров нашего метода и телом, в котором происходит его реализация.
- lambda expression body - тело метода, состоящее из одного выражения или нескольких, заключенных в фигурные скобки.
К каким переменным есть доступ у Лямбда-выражений?¶
Лямбда-выражения имеют доступ к переменным области видимости, в которой их определили. Но доступ возможен только при условии, что переменные являются effective final, то есть либо явно имеют модификатор final, либо не меняют своего значения после инициализации, если переменной присваивается значение во второй раз, лямбда-выражение вызывает ошибку компиляции.
Что такое ссылки на метод?¶
Ссылки на метод - компактные лямбда-выражения которые позволяют передавать ссылки на методы или конструкторы. Для этого нужно использовать ключевое слово "::". Ссылочные методы внедряют полезный синтаксис, чтобы ссылаться на существующие методы или конструкторы Java-классов или объектов (экземпляров). Совместно с лямбда-выражениями, ссылочные методы делают языковые конструкции компактными и лаконичными, делая его шаблонным
Какие виды ссылок на методы вы знаете?¶
Существует четыре вида ссылок на методы:
- Ссылка на статический метод(ContainingClass::staticMethodName)
- Ссылка на метод конкретного объекта(ContainingObject::instanceMethodName)
- Ссылка на метод произвольного объекта конкретного типа(ContainingType::methodName)
- Ссылка на конструктор(ClassName::new), для дженериков (generics) Class< T>::new.
Объясните выражение System.out::println.¶
Выражение System.out::println является ссылкой на статический метод println объекта out класа System, который эквивалентен лямбда-выражению x -> System.out.println(x).
Что такое функциональные интерфейсы?¶
Функциональный интерфейс - это тот интерфейс, который определяет строго один абстрактный метод. В Java 8 была введена новая аннотация @FunctionalInterface для обозначения интерфейса, функциональным, эта аннотация используется для того, чтобы избежать случайного добавления абстрактных методов в функциональный интерфейс. Она не обязательна, но является хорошей практикой написания кода. Функциональные интерфейсы позволяют нам использовать лямбдавыражения для создания экземпляра таких интерфейсов. Лучшим примером функционального интерфейса будет интерфейс java.lang.Runnable с одним абстрактным методом run(). Заметим, интерфейс может включать сколько угодно default методов и при этом оставаться функциональным, потому что default методы - не абстрактные.
Для чего нужен функциональный интерфейс BiConsumer<T,U>?¶
Представляет собой операцию, которая принимает два входных параметра, и не возвращает никакого результата.
Для чего нужен функциональный интерфейс BiFunction<T,U,R>?¶
Представляет собой функцию, которая принимает два аргумента и возвращает результат.
Для чего нужен функциональный интерфейс BinaryOperator<T>?¶
Представляет собой операцию над двумя операндами одного и того же типа, выполняет над ними бинарную операцию и возвращает результат того же типа, что и операнды.
Для чего нужен функциональный интерфейс BiPredicate<T,U>?¶
Представляет собой предикат (булеву функцию) двух аргументов.
Для чего нужен функциональный интерфейс BooleanSupplier?¶
Представляет собой поставщика булевых результатов.
Для чего нужен функциональный интерфейс Consumer<T>?¶
Представляет собой операцию, которая принимает один входной аргумент, выполняет некоторое действие над объектом типа T, при этом ничего не возвращая.
Для чего нужен функциональный интерфейс DoubleBinaryOperator?¶
Представляет собой операцию над двумя операндами типа double, возвращает результат типа double.
Для чего нужен функциональный интерфейс DoubleConsumer?¶
Представляет собой операцию, которая принимает один аргумент типа double, и не возвращает результат.
Для чего нужен функциональный интерфейс DoubleFunction<R>?¶
Представляет собой функцию, которая принимает один аргумент типа double, и возвращает результат.
Для чего нужен функциональный интерфейс DoublePredicate?¶
Представляет собой предикат (булеву функцию) одного аргумента типа double.
Для чего нужен функциональный интерфейс DoubleSupplier?¶
Представляет собой поставщика double результатов.
Для чего нужен функциональный интерфейс DoubleToIntFunction?¶
Представляет собой функцию, которая принимает один аргумент типа double, возвращает результат типу int.
Для чего нужен функциональный интерфейс DoubleToLongFunction?¶
Представляет собой функцию, которая принимает один аргумент типа double, и возвращает результат типу long.
Для чего нужен функциональный интерфейс DoubleUnaryOperator?¶
Представляет собой операцию над одним аргументом типа double, возвращает результат типу double.
Для чего нужен функциональный интерфейс Function<T,R>?¶
Представляет собой функцию перехода от объекта типа T к объекту типа R.
Для чего нужен функциональный интерфейс IntBinaryOperator?¶
Представляет собой операцию над двумя операндами типа int, возвращает результат типа int.
Для чего нужен функциональный интерфейс IntConsumer?¶
Представляет собой операцию, которая принимает один аргумент типа int, и не возвращает результат.
Для чего нужен функциональный интерфейс IntFunction<R>?¶
Представляет собой операцию, которая принимает один аргумент типа int, возвращает результат.
Для чего нужен функциональный интерфейс IntPredicate?¶
Представляет собой предикат (булеву функцию) одного аргумента типа int.
Для чего нужен функциональный интерфейс IntSupplier?¶
Представляет собой поставщика int результатов.
Для чего нужен функциональный интерфейс IntToDoubleFunction?¶
Представляет собой функцию, которая принимает один аргумент типа int, возвращает результат типу double.
Для чего нужен функциональный интерфейс IntToLongFunction?¶
Представляет собой функцию, которая принимает один аргумент типа int, возвращает результат типу long.
Для чего нужен функциональный интерфейс IntUnaryOperator?¶
Представляет собой операцию над одним аргументом типа int, возвращает результат типу int.
Для чего нужен функциональный интерфейс LongBinaryOperator?¶
Представляет собой операцию над двумя операндами типа long, возвращает результат типа long.
Для чего нужен функциональный интерфейс LongConsumer?¶
Представляет собой операцию, которая принимает один аргумент типа long, не возвращает результат.
Для чего нужен функциональный интерфейс LongFunction<R>?¶
Представляет собой функцию, которая принимает один аргумент типа long, и возвращает результат.
Для чего нужен функциональный интерфейс LongPredicate?¶
Представляет собой предикат (булеву функцию) одного аргумента типа long.
Для чего нужен функциональный интерфейс LongSupplier?¶
Представляет собой поставщика long результатов.
Для чего нужен функциональный интерфейс LongToDoubleFunction?¶
Представляет собой функцию, которая принимает один аргумент типа long, и возвращает результат типу double.
Для чего нужен функциональный интерфейс LongToIntFunction?¶
Представляет собой функцию, которая принимает один аргумент типа long, и возвращает результат типу int.
Для чего нужен функциональный интерфейс LongUnaryOperator?¶
Представляет собой операцию над одним аргументом типа long, возвращает результат типу long.
Для чего нужен функциональный интерфейс ObjDoubleConsumer<T>?¶
Представляет собой операцию, которая принимает один аргумент типа object, и второй типа double, и не возвращает результат.
Для чего нужен функциональный интерфейс ObjIntConsumer<T>?¶
Представляет собой операцию, которая принимает один аргумент типа object, и второй типа int, и не возвращает результат.
Для чего нужен функциональный интерфейс ObjLongConsumer<T>?¶
Представляет собой операцию, которая принимает один аргумент типа object, и второй типа long, и не возвращает результат.
Для чего нужен функциональный интерфейс Predicate<T>?¶
Представляет собой предикат (булеву функцию) одного аргумента.
Для чего нужен функциональный интерфейс Supplier<T>?¶
Представляет собой поставщика результатов.
Для чего нужен функциональный интерфейс ToDoubleBiFunction<T,U>?¶
Представляет собой функцию, которая принимает два аргумента, возвращает результат типу double.
Для чего нужен функциональный интерфейс ToDoubleFunction<T>?¶
Представляет собой функцию, которая принимает один аргумент, возвращает результат типа double.
Для чего нужен функциональный интерфейс ToIntBiFunction<T,U>?¶
Представляет собой функцию, которая принимает два аргумента, возвращает результат типу int.
Для чего нужен функциональный интерфейс ToIntFunction<T>?¶
Представляет собой функцию, которая принимает один аргумент, возвращает результат типа int.
Для чего нужен функциональный интерфейс ToLongBiFunction<T,U>?¶
Представляет собой функцию, которая принимает два аргумента, возвращает результат типу long.
Для чего нужен функциональный интерфейс ToLongFunction<T>?¶
Представляет собой функцию, которая принимает один аргумент, возвращает результат типа long.
Для чего нужен функциональный интерфейс UnaryOperator<T>?¶
Представляет собой операцию над одним операндом, возвращает результат того же типа, что и операнд.
Что такое StringJoiner?¶
StringJoiner используется, чтобы создать последовательность символов, разделенных разделителем, может (но это не обязательно) начинаться с префикса и заканчиваться суффиксом. Пример:
Что такое default методы?¶
Начиная с Java 8 мы можем использовать в интерфейсах стандартные методы (default methods) и статические методы (static methods). Default метод - это метод в интерфейсе с по умолчанию реализованной логикой, который не требуется обязательно определять в реализации этого интерфейса.
Что такое static методы?¶
Static-методы в интерфейсе - это по существу то же самое, что static-методы в абстрактном классе.
- Статические методы в интерфейсе являются частью интерфейса, мы не можем использовать его для объектов класса реализации.
- Статические методы в интерфейсе хороши для обеспечения вспомогательных методов, например, проверки на null, сортировки коллекций и т.д.
- Статические методы в интерфейсе помогают обеспечивать безопасность, не позволяя классам, которые реализуют интерфейс, переопределить их.
- Мы не можем определить статические методы для методов класса Object, потому что получим ошибку компиляции.
Как вызывать default-метод интерфейса в классе?¶
Используя ключевое слово super вместе с именем интерфейса.
Как вызывать static-метод интерфейса в классе?¶
Используя имя интерфейса.
Что такое потоки(stream) в Java 8?¶
java.util.stream - введен для поддержки распараллеливания вычислений в потоках. Предоставляет возможность обрабатывать последовательность элементов исполняя одну или несколько операций, которые могут выполняться либо последовательно либо паралельно. Потоки делятся на последовательные и параллельные. Самая большая польза от этого - в работе с коллекциями.
Операции над потоком относятся либо к промежуточным, либо к терминальным. Все промежуточные операции возвращают поток, так что мы можем объединять несколько промежуточных операций без использования точки с запятой. Терминальные операции возвращают void или непотоковый результат.
Для чего нужен метод collect Java 8?¶
Большинство операций класса Stream, которые модифицируют набор данных, возвращают этот набор в виде потока. Однако бывают ситуации, когда хотелось бы получить данные не в виде потока, а в виде обычной коллекции, например, ArrayList или HashSet. И для этого у класса Stream определен метод collect. Метод принимает в качестве параметра функцию преобразования к коллекции:
<R,A> R collect(Collector super T,A,R> collector)
Параметр R представляет тип результата метода, параметр Т - тип элемента в потоке, а параметр А - тип промежуточных накапливаемых данных. В итоге параметр collector представляет функцию преобразования потока в коллекцию.
В чем разница между коллекцией(Collection) и потоком(Stream)?¶
Разница между коллекцией(Collection) данных и потоком(Stream) из новой JDK8 в том что коллекции позволяют работать с элементами по-отдельности, тогда как поток(Stream) не позволяет. Например, с использованием коллекций, вы можете добавлять элементы, удалять, и вставлять в середину. Поток(Stream) не позволяет манипулировать отдельными элементами из набора данных, но вместо этого позволяет выполнять функции над данными как одним целом.
Для чего предназначен метод forEach в потоках(stream)?¶
Метод void forEach(Consumer super T> action) - для каждого элемента выполняется действие action. forEach является терминальной операцией, используется для перебора каждого элемента потока. forEach не гарантирует последовательности вывода элементов в параллельном stream-е, для этого используется метод forEachOrdered - он это гарантирует.
Как вывести на экран 10 случайных чисел, используя forEach?¶
Следующий фрагмент кода показывает, как вывести 10 случайных чисел с помощью forEach
Для чего предназначен метод map в потоках(stream)?¶
Метод <R> Stream<R> map(Function super T,? extends R> mapper) - преобразует элементы типа T в элементы типа R и возвращает поток с элементами R. map является промежуточной операцией, метод используется для преобразования элементов в другой объект при помощи переданной функции.
Как можно вывести на экран уникальные квадраты чисел используя метод map?¶
Следующий фрагмент кода демонстрирует это, используя метод map.
Какова цель метода filter в потоках(stream)?¶
Метод Stream<T> Filter(Predicate super T> predicate) - фильтрует элементы в соответствии с условием в предикате. Filter является промежуточной операцией, используется для фильтрации массива через функцию. На самом деле Filter, не выполняет фильтрацию, вместо этого он создается новый поток, который по завершению формирования, содержит элементы исходного потока, которые соответствуют заданному предикату
Как вывести на экран количество пустых строк с помощью метода filter?¶
Следующий фрагмент кода демонстрирует это с помощью метода Ùlter.
Для чего предназначен метод limit в потоках(stream)?¶
Метод Stream<T> limit(long maxSize) - оставляет в потоке только maxSize элементов. limit является промежуточной операцией, используется для выборки первых maxSize элементов потока. Этот метод также возвращает модифицированный поток, в котором не более maxSize элементов.
Для чего предназначен метод sorted в потоках(stream)?¶
Метод Stream<T> sorted()/Stream<T> sorted(Comparator super T> comparator) - возвращает отсортированный поток. sorted является промежуточной операцией, метод используется для сортировки потока используя естественный порядок сравнения его элементов. Существует также второй метод sorted(), принимающий либо экземпляр Comparable, либо соответствующее ему лямбда-выражение.
Как вывести на экран 10 случайных чисел в отсортированном порядке в Java 8?¶
Следующий фрагмент кода демонстрирует это:
Параллельная обработка в Java 8?¶
Чтобы сделать обычный последовательный поток параллельным, надо вызвать у объекта Stream метод parallel. Кроме того, можно также использовать метод parallelStream() интерфейса Collection для создания
параллельного потока из коллекции.
В то же время если рабочая машина не является многоядерной, то поток будет выполняться как последовательный. Следующий фрагмент кода, выводит количество пустых строк с помощью метода parallelStream.
Как найти максимальное число в списке Java 8?¶
Следующий код выводит наибольшее число которое присутствует в списке.
Как найти минимальное число в списке Java 8?¶
Следующий код выводит минимальное число которое присутствует в списке.
Как получить сумму всех чисел в списке, используя Java 8?¶
Следующий код выведет сумму всех чисел.
Как получить среднее значение всех чисел, в списке, используя Java 8?¶
Следующий код выведет среднее значение всех чисел.
Что такое Optional?¶
Optional - это контейнер объекта, он может содержать значение или некоторый тип Т, или просто быть null. Он предоставляет много полезных методов избавляющие от добавления повторяющихся if null/notNull проверок, что позволяет нам сфокусироваться на том, что мы хотим сделать. Метод isPresent() возвращает true если экземпляр Optional содержит не null значение и false в противном случае. Метод orElseGet() содержит запасной механизм результата, если Optional содержит null, принимая функции для генерации значения по умолчанию. Метод map() преобразует текущее значение Optional и возвращает новый экземпляр Optional. Метод orElse() похож на orElseGet(), но вместо функции он принимает значение по умолчанию.
Что такое Nashorn?¶
Nashorn - это движок JavaScript, разрабатываемый полностью на Java компанией Oracle. Он призван дать возможность встраивать код JavaScript в приложения Java. В сравнении с Rhino, который поддерживается Mozilla Foundation, Nashorn обеспечивает от 2 до 10 раз более высокую производительность, так как он непосредственно компилирует код в памяти и передает байт-код виртуальной машине Java. Nashorn умеет компилировать код JavaScript и генерировать классы Java, которые загружаются специальным загрузчиком. Возможен вызов кода Java прямо из JavaScript.
Что такое jjs в Java 8?¶
Nashorn поставляется с cmd-утилитой jjs, которая позволяет исполнять JavaScript прямо в консоли. jjs принимает список JavaScript файлов исходного кода и запускает их. Чтобы запустить файл давайте передадим его как аргумент в jjs: jjs FileName.js
Что такое LocalDateTime в Java 8?¶
LocalDateTime объединяет вместе LocaleDate и LocalTime и содержит дату и время, но без часового пояса в календарной системе ISO-8601. Время хранится с точностью до наносекунды, так что в LocalTime можно хранить, например, величину "13:45.30.123456789". Есть множество удобных методов, таких как plusMinutes, plusHours, isAfter, toSecondOfDay и т.д
Что такое ZonedDateTime в Java 8?¶
ZonedDateTime - аналог java.util.Calendar. Это самый мощный класс с полной информацией о временном контексте, включает временную зону. Он содержит дату и время в календарной системе ISO-8601.
Как получить текущую дату с использованием time API из Java 8?¶
Следующий код выводит текущую дату.
Как добавить 1 неделю к текущей дате с использованием time API?¶
Следующий код добавляет 1 неделю к текущей дате.
Как добавить 1 месяц к текущей дате с использованием time API?¶
Следующий код добавляет 1 месяц к текущей дате.
Как добавить 1 год к текущей дате с использованием time API?¶
Следующий код добавляет 1 год к текущей дате.
Как добавить 10 лет к текущей дате с использованием time API?¶
Следующий код добавляет 10 лет к текущей дате.
Как получить следующий вторник используя time API?¶
Следующий код возвращает следующий вторник.
Как получить вторую субботу текущего месяца используя time API?¶
Следующий код демонстрирует это.
Как получить текущею дату в миллисекундах используя time API?¶
Следующий код возвращает дату в миллисекундах.
Как получить текущею дату по местному времени в миллисекундах используя используя time API?¶
Следующий код демонстрирует это.
Какой класс появился в Java 8 для декодирования данных?¶
В Java 8 для этого появился класс public static class Base64.Decoder - этот класс реализует декодер для декодирования байт данных, используя схему кодирования Base64 как указано в RFC 4648 и RFC 2045, класс безопасен для использования несколькими параллельными потоками.
Какой класс появился в Java 8 для кодирования данных?¶
В Java 8 для этого появился класс public static class Base64.Encoder - этот класс реализует кодер для кодирования байт данных, используя схему кодирования Base64 как указано в RFC 4648 и RFC 2045, класс безопасен для использования несколькими параллельными потоками.
Как создать Base64 декодировщик?¶
Используя метод getDecoder() класса Base64 он возвращает декодировщик Base64.Decoder, который декодирует данные с помощью схемы кодирования base64.
Как создать Base64 кодировщик?¶
Используя метод getEncoder() класса Base64 он возвращает кодировщик Base64.Encoder, который кодирует данные с помощью схемы кодирования base64.
Обновлено Александр Александров больше 5 лет назад · 3 изменени(я, ий)
Go to top