Класс 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,
который предоставляет методы для работы с файлами и директориями