Пять уроков по Java

        

SequenceInputStream


Если необходимо объединить в один поток данные из нескольких потоков, на помощь придет класс SequenceInputStream. Он очень прост в использовании: достаточно передать ему список файлов, выполненных в виде класса, унаследованного от интерфейса Enumeration. Задача значительно упрощается, если требуется объединить всего два потока. Создайте объект класса SequenceInputStream, вызвав другой его конструктор, принимающий два аргумента типа InputStream. Для примера создадим класс списка файлов и передадим его объекту класса SequenceInputStream:

import ileLjava.util.*; import java.io.*; class FileList implements Enumeration { String[] fist; int count = 0; FileList (String[] listOfFiles) { this.fileList = listOfFiles;} public boolean hasMoreElements() { if (current < fileList.length) return true; else return false; } public Object nextElement() { InputStream is = null; if (!hasMoreElements()) throw new NoSuchElementException ("No more files."); else { String nextElement = fileList[current]; current++; is = new FileInputStream (nextElement); } return is; } }

Теперь, когда в нашем распоряжении имеется класс-список, на его основе можно создать единый поток данных из нескольких отдельных потоков:

import java.io.*; class Example { public static void main (String[] args) { ListOfFiles mylist = new ListOfFiles(args); SequenceInputStreamis = new SequenceInputStream(mylist); int c; // Здесь производятся некоторые действия над полученным потоком s.close(); } }



Содержание раздела