Класс DataInputStream наследует класс надстройку FilterInputStream и позволяет читать данные из входного байтового потока в формате примитивных типов данных: double, boolean и т.д.
DataOutputStream
Парный класс DataOutputStream наследует класс FilterOutputStream и позволяет записывать значения примитивных типов в выходной байтовый поток, который затем можно будет прочесть используя класс DataInputStream.
Экземпляры классов DataInputStream и DataOutputStream надстраивают, соответственно, входной и выходной потоки, которые передаются им как параметры конструкторов при их создании.
Стандартный класс java.util.Stack не рекомендуется использовать, он сохранён только для обратной совместимости. В первой версии Java в реализации Stack допущены ошибки, например:
Stack — конкретный класс, в отличие от остальных базовых коллекций, которые представлены интерфейсами: Set, List, Queue;
класс наследуется от Vector, что концептуально неверно (поддерживаются лишние операции)
Более полный и согласованный набор LIFO операций предоставляется через интерфейс Deque и его реализации, которые должны использоваться вместо этого класса: