Является ли более эффективным использование потока данных объекта или примитивного потока данных в Java? - PullRequest
2 голосов
/ 15 января 2011

При выполнении операций ввода-вывода в Java, как правило, более эффективно (с точки зрения вычислительных ресурсов) использовать поток данных объекта, например ObjectInputStream, или более эффективно использовать поток примитивных данных, например DataInputStream?

Если более эффективно использовать поток данных объекта, является ли поток данных объекта еще более эффективным, когда мы учитываем издержки (как можно меньшие), связанные с созданием объекта?

Ответы [ 5 ]

4 голосов
/ 16 января 2011

Пользовательская сериализация может сэкономить ваше пространство / пропускную способность и время процессора, если все сделано правильно.

Я предлагаю вам взглянуть на Протокол буфера протокола Google - очень эффективную и портативную библиотеку сериализации.

3 голосов
/ 15 января 2011

Вы выбираете Object или Data InputStream в зависимости от того, какие данные действительно находятся в вашем потоке. Если это Java-объекты, используйте поток объектов, если это не так, то DataInputStream (или другой в зависимости от ситуации).

Итак, какие данные у вас в потоке?

2 голосов
/ 16 января 2011

Сериализация / десериализация объектов - одна из самых тяжелых вещей в Java.Так что, если это критичная для производительности часть вашей программы, то избежание сериализации объектов может помочь.Хотя во многих случаях узкие места находятся где-то еще, и вы можете в конечном итоге сделать преждевременную оптимизацию.Поэтому IMHO, если вы точно не знаете, что это будет узкое место, используйте ObjectInputStream и оптимизируйте его позже.

2 голосов
/ 16 января 2011

ObjectInputStream будет проще в использовании.Я бы проверил, что это не будет достаточно быстро, прежде чем перейти к усилиям по использованию DataInputStream.DataInputStream не так эффективен, как использование NIO / ByteBuffer, но усилие увеличивается для относительно небольшого улучшения.

1 голос
/ 16 января 2011

Почему бы вам не написать что-то, что делает то, что вы хотите, поставьте несколько тестов, чтобы вы знали, что это работает.Тогда, если это когда-нибудь станет проблемой, вы сможете заменить реализацию чем-то более быстрым, без суеты и беспокойства.Если окажется, что это не проблема, как большинство подобных вещей ... то вы не будете тратить время на что-то ненужное и не будете преждевременно оптимизированы.это очень удобно и очень удобно.

если ваша архитектура не слишком болтливая, вам никогда не понадобится оптимизировать этот бит.

...