2012-01-19 1 views
3

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

+0

Прочитайте [документацию] (http://docs.oracle.com/javase/7/docs/api/). –

ответ

10

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

+0

Производительность по существу одинакова для примитивных типов. –

3

DataOutputStream убеждается данные форматируются в платформу независимым образом

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

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

Не существует существенной разницы в производительности между обоими.

3

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

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

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

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

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

 Смежные вопросы

  • Нет связанных вопросов^_^