Есть ли простой способ создать Java InputStream, который состоит из нескольких добавленных файлов? - PullRequest
7 голосов
/ 04 июня 2009

У меня есть компонент «процессор», который может обрабатывать один файл, InputStream, Reader и т. Д.

По разным причинам я получаю несколько больших файлов вместо одного огромного.

Есть ли способ построить входной поток (или читатель), который: прозрачно «добавляет» все эти файлы так, чтобы: 1) «процессор» не знает, где один файл начался или другой закончился 2) В файловой системе не происходит никаких изменений (например, нет фактического добавления файлов) 3) Каждый файл читается по порядку, чтобы я не оплачивал загрузку их всех в память и добавление их до того, как процессор начнет читать?

Я уверен, что можно написать что-то подобное, но мне интересно, существует ли оно уже; Прошло много времени с тех пор, как я сделал IO на основе файлов.

Ответы [ 2 ]

19 голосов
/ 04 июня 2009

SequenceInputStream объединяет несколько потоков.

List<InputStream> opened = new ArrayList<InputStream>(files.size());
for (File f : files) 
  opened.add(new FileInputStream(f));
InputStream is = new SequenceInputStream(Collections.enumeration(opened));

Важна обработка исключений (не показана) при открытии каждого файла; убедитесь, что все файлы обязательно будут закрыты, даже если операция была прервана до создания SequenceInputStream.

4 голосов
/ 04 июня 2009

Вы можете использовать что-то вроде SequenceInputStream для чтения одного потока за другим.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...