В java есть “Потоки для соединений” и “Цепные потоки”.
Скачать исходники для статьи можно ниже
Потоки для соединений представляют собой подключение к источнику или пункту назначения (файлу, массиву, сокету и т.д.). При передаче данных через потоки ввода-вывода обязательно должен быть один поток для соединения.
Потоки для соединения обычно являются низкоуровневыми. Данные по ним передаются обычно в байтах. Иногда достаточно одного потока для соединения, однако в большинстве случаев нам понадобятся цепные потоки.
Чтобы записать дробные данные, строки, объекты, или чтобы буферизировать данные нам без помощи цепных потоков не обойтись. В отличии от потоков для соединения цепных потоков может быть несколько,
а может не быть вообще.
К цепным потокам можно отнести:
BufferedOutputStream
BufferedInputStream
DataOutputStream
DataInputStream
ObjectOutputStream
ObjectInputStream
Пример использования цепного потока:
public class Main {
public static void main(String[] args) throws IOException {
File file1 = new File("file1.txt");
// открывается поток для соединения
FileOutputStream outputSream1 = new FileOutputStream(file1);
// открывается цепной поток для передачи boolean данных
DataOutputStream dataOutputSream1 = new DataOutputStream(outputSream1);
for (int i = 0; i < 10; i++) {
boolean b = i % 2 == 0 ? false : true;
dataOutputSream1.writeBoolean(b);
}
FileInputStream inputSream1 = new FileInputStream(file1);
DataInputStream dataInputSream1 = new DataInputStream(inputSream1);
for (int i = 0; i < 10; i++) {
System.out.println(dataInputSream1.readBoolean());
}
dataOutputSream1.close();
dataInputSream1.close();
}
}
Вывод программы:
false
true
false
true
false
true
false
true
false
true


