В 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