DataInputStream / DataOutputStream - это InputStream / Outputstream. InputStream и OutputStream являются наиболее общими потоками ввода-вывода, которые вы можете использовать, и они являются базовым классом всех потоков в Java. Вы можете читать и записывать необработанные байты только вместе с ними. DataInputStream записывает отформатированные двоичные данные. Вместо простых неформатированных байтов вы можете прочитать строки Bytes, Integer, Double, Float, Short, UTF-8 и любую смесь этих данных. То же самое можно сказать и о DataOutputStream за исключением того, что он записывает эти типы данных более высокого уровня. DataInputStream / DataOutputStream имеет ссылку на InputStream / OutputStream, который считывает необработанные байты и интерпретирует эти байты как ранее упомянутые типы данных.
Хотя чтение строк из DataInputStream не очень хорошая идея, поскольку оно делает неизменные предположения о кодировке символов базового InputStream. Вместо этого лучше использовать Reader, который будет правильно применять кодировки символов к базовому потоку байтов для чтения данных. Вот почему DataInputStream / DataOutputStream имеет ограниченное использование. Обычно лучше обмениваться текстовыми данными между процессами, поскольку проще всего заставить сервер и клиент договориться о том, как анализировать данные. Торговый бинарный код имеет множество незначительных изменений, чтобы убедиться, что каждый процесс говорит на одном языке. Это легко, если у вас есть два Java-процесса, использующих DataInputStream / DataOutputStream, но если вы когда-нибудь захотите добавить новый клиент, не являющийся Java, вам будет сложнее повторно его использовать. Не невозможно, а просто сложнее.