Класс SequenceInputStream служит для объединения чтения из нескольких потоков. У класса есть 2 конструктора - для объединения 2 потоков и нескольких потоков с использованием интерфейса Enumeration<T>. Пример:
/* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ package javainputoutput;
/** * * @author martyshov */ import java.io.*; import java.nio.*; import java.util.*;
public class JavaInputOutput {
/** * @param args the command line arguments */ public static void main(String[] args) throws IOException {
//класс реализует Enumeration<T> для хранения потоков class ArrayStreamEnum implements Enumeration<InputStream> {
private Enumeration<InputStream> str;
@Override public boolean hasMoreElements() { return this.str.hasMoreElements(); }
@Override public InputStream nextElement() { return this.str.nextElement(); }
public void AddStreams(Vector<InputStream> vis) { this.str = vis.elements(); }
}
//байты с данными byte[] b1 = {1, 2, 3, 4, 5, 6, 7}; byte[] b2 = {66, 77, 88, 99, 100}; byte[] b3 = {9, 8, 7, 6, 5, 4, 3, 2, 1};
//создаем потоки байтов для чтения ByteArrayInputStream a1 = new ByteArrayInputStream(b1); ByteArrayInputStream a2 = new ByteArrayInputStream(b2); ByteArrayInputStream a3 = new ByteArrayInputStream(b3); SequenceInputStream s = null;
try {
//создаем вектор и добавляем потоки Vector<InputStream> v = new Vector<>(); v.add(a1); v.add(a2); v.add(a3);
//создаем объект для перечисления потоков и добавляем туда потоки ArrayStreamEnum es = new ArrayStreamEnum(); es.AddStreams(v); //создаем объединенный поток s = new SequenceInputStream(es);
//выводим из потока посимвольно Integer ch; while ((ch = s.read()) != -1) { System.out.print(ch.toString() + ", "); } //второй вариант конструктора в SequenceInputStream //сбрасываем потоки для повторного чтения a1.reset(); a3.reset(); System.out.println("\n"); //второй вариант конструктора принимает два потока SequenceInputStream s2 = new SequenceInputStream(a1, a3); //выводим на констоль while ((ch = s2.read()) != -1) { System.out.print(ch.toString() + ", "); }
} catch (Exception e) { System.err.println(e.getLocalizedMessage()); } finally { s.close(); a1.close(); a2.close(); a3.close(); }
}
}
|