Перейти к основному содержимому

Класс SequenceInputStream в Java

· 2 мин. чтения

1. Обзор

В этом руководстве мы узнаем, как использовать класс SequenceInputStream в Java. В частности, этот класс полезен при непрерывном чтении ряда файлов или потоков.

Для получения дополнительной информации о Java IO и других связанных классах Java мы можем прочитать Java IO Tutorials .

2. Использование класса SequenceInputStream

SequenceInputStream принимает два или более объектов InputStream в качестве источников. Он читает из одного источника за другим в заданном порядке. Когда он завершает чтение из первого InputStream , он автоматически начинает чтение со второго. Этот процесс продолжается до тех пор, пока не завершится чтение из всех исходных потоков.

2.1. Создание объекта

Мы можем инициализировать SequenceInputStream , используя два объекта InputStream :

InputStream first = new FileInputStream(file1);
InputStream second = new FileInputStream(file2);
SequenceInputStream sequenceInputStream = new SequenceInputStream(first, second);

Мы также можем создать его экземпляр с помощью перечисления объектов InputStream :

Vector<InputStream> inputStreams = new Vector<>();
for (String fileName: fileNames) {
inputStreams.add(new FileInputStream(fileName));
}
sequenceInputStream = new SequenceInputStream(inputStreams.elements());

2.2. Чтение из потока

SequenceInputStream предоставляет два простых метода для чтения из источников ввода. Первый метод считывает один единственный байт, тогда как второй метод считывает массив байтов.

Чтобы прочитать один байт данных , мы используем метод read() :

int byteValue = sequenceInputStream.read();

В приведенном выше примере метод чтения возвращает значение следующего байта (0–255) из потока. Если поток подходит к концу, то он возвращает -1 .

Мы также можем прочитать массив байтов :

byte[] bytes = new byte[100];
sequenceInputStream.read(bytes, 0, 50);

В приведенном выше примере он считывает 50 байт и размещает их, начиная с индекса 0 .

2.3. Пример, показывающий чтение последовательности

В качестве источника ввода берутся две строки для демонстрации последовательности чтения:

InputStream first = new ByteArrayInputStream("One".getBytes());
InputStream second = new ByteArrayInputStream("Magic".getBytes());
SequenceInputStream sequenceInputStream = new SequenceInputStream(first, second);
StringBuilder stringBuilder = new StringBuilder();
int byteValue;
while ((byteValue = sequenceInputStream.read()) != -1) {
stringBuilder.append((char) byteValue);
}
assertEquals("OneMagic", stringBuilder.toString());

В приведенном выше примере, если мы напечатаем stringBuilder.toString() , он покажет следующий вывод:

OneMagic

3. Заключение

В этой короткой статье мы увидели, как работать с SequenceInputStream . Он просто объединяет все базовые входные потоки в один поток .

Полный пример кода можно найти на GitHub .