Приветствую Вас ГостьВторник, 14.05.2024, 05:06

Программирование на Java, Android, Delphi


Блог

Главная » 2014 » Январь » 31 » java.io класс SequenceInputStream
11:08
java.io класс SequenceInputStream
Класс 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();
}

}

}

Категория: Java (Библиотека, пакеты Java) | Просмотров: 633 | Добавил: alex | Рейтинг: 5.0/1
Категории раздела
Java (Общие вопросы) [17]
Java (Библиотека, пакеты Java) [17]
Java (Разработка программного обеспечения на Java) [5]
Java (Среда разработки NetBeans) [5]
JSF + PrimeFaces [21]
Java EE [11]
Разное [3]
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0
Форма входа
Поиск
Календарь
«  Январь 2014  »
ПнВтСрЧтПтСбВс
  12345
6789101112
13141516171819
20212223242526
2728293031
Архив записей