Входные и выходные потоки данных
#
Васильев Андрей Михайлович, 2024
Версии презентации
Потоки ввода и вывода
#
- При запуске процесса ему могут быть переданы стандартные потоки данных:
- Стандартный ввод
- Стандартный вывод
- Стандартный вывод ошибок
- Данные потоки обычно ориентированы на работу с текстовыми данными, но не
обязательно
Работа со стандартным потоком вывода
#
Kotlin предоставляет следующие функции для вывода информации на стандартный
поток:
print()
— вывести данные на стандартный поток
println()
— вывести данные на стандартный поток и добавить символ перевода
строки
При работе на платформе JVM мы также можем обратиться к классам из стандартной
библиотеки Java, объект System.out
также доступен для вывода информации
Данные на стандартном потоке вывода предназначены для обозначения содержательных
результатов работы приложения пользователю
Работа со стандартным потоком ошибок
#
Kotlin не предоставляет дополнительных средств взаимодействия с потоком ошибок
за исключением стандартного объекта Java, System.err
С его помощью можно выводить нужную информацию на данный поток:
System.err.println("Произошла ошибка с данными")
Стандартный поток ошибок обычно выводится на тот же интерфейс, что и обычный
поток ошибок. При работе с эмулятором терминала зачастую невозможно отличить
откуда пришла информация
IDEA делает различие потоков удобным: красным отображаются сообщения на потоке
ошибок
Данные на потоке ошибок несут либо отладочную информацию, либо призывают
пользователя изменить способ взаимодействия с приложением
Получение данных из стандартного потока ввода
#
Kotlin предоставляет следующие функции для считывания данных:
Отличие заключается в возвращаемом значении. В случае ошибки первая функция
выбросит исключение RuntimeException, а вторая вернёт значение null
В случае, если необходимо обработать входной поток каким-либо другим способом,
то всегда можно обратиться к объекту System.in
и классу java.util.Scanner
Стандартный поток при использовании Gradle
#
При запуске приложения через систему сборки Gradle по умолчанию приложению
предоставляются только потоки вывода, поток ввода не предоставляется
Для разрешения доступа к потоку ввода необходимо добавить следующий блок в
конфигурационный файл build.gradle.kts
tasks.withType<JavaExec> {
standardInput = System.`in`
}
Для всех задач указываем возможность использования стандартного потока ввода, в
том числе и для задачи run
Код возврата
#
Приложение также сообщает внешнему миру о результатах своей работы через
установку кода возврата
- Если код возврата равен 0, то приложение корректно завершило свою работу
- Если код возврата не равен 0, то приложение не смогло выполнить поставленную
задачу
Для установки кода возврата в Kotlin следует использовать функцию
exitProcess(status: Int)
- В качестве аргумента ей передаётся код, который приложение должно вернуть
- Во всём приложении данную функцию следует вызывать не более 1 раза
- Если её не вызвать, то приложение в отсутствии падения вернёт код возврата 0
В случае возникновения ошибки приложение должно установить ошибочный код
возврата
Переменные окружения
#
- Переменные окружения устанавливаются до запуска приложения
- Они представляют собой пары ключ-значение
- Внутри приложения ключи и значения рассматриваются как строки
Kotlin не предоставляет дополнительных средств считывания переменных окружения,
на платформе JVM доступен класс System
с методом getEnv
:
val allVariables: Map<String, String> = System.getEnv()
val homeVariable: String? = System.getEnv("HOME")
IDEA и Gradle предоставляют возможности по настройке переменных окружения перед
запуском процесса
Аргументы приложения
#
При запуске приложению могут быть переданы аргументы — некоторый набор строк,
которое приложение может использовать при своей работе
При работе из командного интерфейса с помощью аргументов:
- Указывают какие файлы приложение должно обработать
- Указывают какие операции приложение должно выполнить
- Указывают параметры выполнения этих операций
Т.е. зачастую аргументы целиком настраивают то действие, которое приложение
должно выполнить
Считывание аргументов в Kotlin
#
Для получения аргументов в приложении у функции main()
необходимо указать
аргумент с типом Array<String>
:
fun main(args: Array<String>) { ... }
Для работы с переданным массивом можно воспользоваться:
- Свойством
.size
для получения количества переданных аргументов
- Методом
[]
для получения значения аргумента на указанной позиции
В зависимости от требований приложение должно выполнить обработку аргументов
Установка аргументов в Gradle
#
При запуске приложения с помощью задачи run
для передачи аргументов
приложению нужно воспользоваться аргументом --args
системы сборки
Предположим, что мы хотим передать нашему приложению два аргумента: first
и
10
тогда необходимо запустить задачу Gradle следующим образом:
gradle run --agrs="first 10"
Приложению будет передан массив из двух строк: first
и 10
В IDEA можно настроить несколько вариантов запуска команды run с разным набором
аргументов и переключаться между ними для решения задач