От автора code.mu: РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
600 of 1310 menu

Класс InputStream

Класс InputStream является базовым классом для всех потоков ввода байтов. Он предоставляет методы для чтения данных из файла в виде байтов. Для работы с файлами обычно используется FileInputStream, который наследует от InputStream.

Импорт

import java.io.InputStream import java.io.FileInputStream

Синтаксис

// Создание через FileInputStream val stream: InputStream = FileInputStream("file.txt") // Создание через расширяющую функцию File val stream2: InputStream = File("file.txt").inputStream()

Основные методы

Метод read читает один байт и возвращает его как Int или -1 если достигнут конец файла:

val stream = FileInputStream("file.txt") val byte = stream.read() while (byte != -1) { print(byte) byte = stream.read() } stream.close()

Метод read с массивом байтов читает данные в массив и возвращает количество прочитанных байтов:

val stream = FileInputStream("file.txt") val buffer = ByteArray(1024) var bytesRead = stream.read(buffer) while (bytesRead != -1) { println("Read $bytesRead bytes") bytesRead = stream.read(buffer) } stream.close()

Пример

Чтение всего файла в массив байтов:

val stream = FileInputStream("data.bin") val bytes = stream.readBytes() stream.close() println("File size: ${bytes.size} bytes")

Результат выполнения кода:

File size: 256 bytes

Пример

Использование блока use для автоматического закрытия потока:

FileInputStream("file.txt").use { stream -> val bytes = stream.readBytes() println("Read ${bytes.size} bytes") }

Результат выполнения кода:

Read 1024 bytes

Пример

Чтение файла по частям с использованием буфера:

FileInputStream("largefile.dat").use { stream -> val buffer = ByteArray(4096) var totalBytes = 0 var bytesRead: Int do { bytesRead = stream.read(buffer) if (bytesRead != -1) { totalBytes += bytesRead println("Read $bytesRead bytes, total: $totalBytes") } } while (bytesRead != -1) }

Результат выполнения кода:

Read 4096 bytes, total: 4096 Read 4096 bytes, total: 8192 Read 2048 bytes, total: 10240 Read 0 bytes, total: 10240

Пример

Пропуск определенного количества байтов с помощью метода skip:

FileInputStream("data.bin").use { stream -> // Пропускаем первые 100 байтов val skipped = stream.skip(100) println("Skipped $skipped bytes") // Читаем следующий байт val byte = stream.read() println("Next byte: $byte") }

Результат выполнения кода:

Skipped 100 bytes Next byte: 65

Смотрите также

  • класс OutputStream,
    который предоставляет методы для записи байтов в файл
  • функцию bufferedReader,
    которая создает буферизованный поток для чтения текста
  • функцию readBytes,
    которая читает весь файл как массив байтов
  • класс File,
    который предоставляет методы для работы с файлами и директориями
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить