Разница между классами DataInputStream / DataOutputStream и классом InputStream / OutputStream - PullRequest
3 голосов
/ 19 января 2012

Всякий раз, когда я использую класс HttpConnection в Java ME, Android или BlackBerry, я использую класс DataInputStream / DataOutputStream для чтения и записи данных через удаленный сервер. Однако существуют другие классы, такие как InputStream / OutputStream, которые можно использовать для той же цели. Я видел Вопрос относительно InputStream / OutputStream класса с HttpConnection. Поэтому я хотел бы знать от экспертов, что есть различия между этими двумя?

Ответы [ 3 ]

10 голосов
/ 19 января 2012

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, вам будет сложнее повторно его использовать. Не невозможно, а просто сложнее.

3 голосов
/ 02 марта 2016

DataOutputStream может обрабатывать только базовые типы.

Он может только читать / записывать типы примитивов и Strings .DataInput / OutputStream в целом работает лучше, потому что он намного проще.

ObjectInput / OutputStream может читать / записывать любой тип объекта , а также примитивы . Это менее эффективно, но гораздо проще в использовании, если вы хотите отправлять сложные данные.

С классом ObjectOutputStream экземпляры класса, который реализует Serializable, могут быть записаны в выходной поток и могут быть прочитаны обратно с помощью ObjectInputStream.

Я бы предположил, что Object * Stream является лучшим выбором , пока вы не узнаете, что его производительность является проблемой.

3 голосов
/ 20 марта 2015

DataOutputStream обеспечивает форматирование данных независимо от платформы

OutputStream только при передаче необработанных двоичных данных.

DataOutputStream -Это большое преимущество.

Нет существенного различия в производительности между ними.

...