Ответ
Оба класса, FileInputStream и ByteArrayInputStream, являются конкретными реализациями абстрактного класса java.io.InputStream.
Общие характеристики:
- Наследуют один и тот же контракт для чтения байтовых данных.
- Предоставляют стандартные методы
read(),read(byte[] b),read(byte[] b, int off, int len),available()иclose(). - Используют паттерн декоратор и могут быть обёрнуты в другие потоки (например,
BufferedInputStream).
Различие заключается только в источнике данных: FileInputStream читает из файла в файловой системе, а ByteArrayInputStream — из байтового массива (byte[]) в памяти.
Пример использования:
// Чтение из файла
try (InputStream fis = new FileInputStream("data.txt")) {
byte[] buffer = new byte[1024];
int bytesRead;
while ((bytesRead = fis.read(buffer)) != -1) {
// обработка данных в buffer
}
}
// Чтение из массива байтов в памяти
byte[] data = "Hello".getBytes(StandardCharsets.UTF_8);
try (InputStream bais = new ByteArrayInputStream(data)) {
int byteData;
while ((byteData = bais.read()) != -1) {
System.out.print((char) byteData);
}
}