Скорость: сериализация Java или CSV? - PullRequest
0 голосов
/ 05 февраля 2009

У меня большой массив простых структур Java (состоит только из примитивных элементов), и мне нужно сохранить и загрузить их из файла и в файл

Что было бы быстрее,

  • реализация java.io.Serializable и использование чтение / запись объекта или
  • переопределение toString () / toCSV () , добавление нового конструктора и чтение / запись в текстовый файл?



Я хочу избежать двоичного потока на этом этапе.

Ответы [ 8 ]

5 голосов
/ 05 февраля 2009

Сериализация обычно быстрее. Вы экономите время на синтаксическом анализе файла, когда читаете его обратно. Однако CSV-подход будет более гибким со временем и различными реализациями вашей программы.

4 голосов
/ 05 февраля 2009

Я бы посоветовал вам написать пример теста и посмотреть, какой из них быстрее.

3 голосов
/ 05 февраля 2009

Есть много альтернатив здесь. Вы можете рассмотреть возможность использования протокольных буферов - они чрезвычайно быстрые и не зависят от платформы.

1 голос
/ 05 февраля 2009

Это, вероятно, не имеет значения. Если массив достаточно мал для хранения в памяти, он может быть записан очень быстро. Если приложение записывает данные только один раз, я бы просто написал все, что было проще.

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

1 голос
/ 05 февраля 2009

Java Serialization делает много вещей под капотом, которые, вероятно, сделают фактический шаг десериализации быстрее, чем чтение из файла и создание экземпляров ваших объектов вручную. Тем не менее, есть много тонких ошибок, которые нужно учитывать, и если вы собираетесь использовать сериализацию для «серьезной» работы, вам, вероятно, следует сначала обратиться к «Эффективной Java» Джоша Блоха, поскольку он посвящает эту тему целой главе.

Однако, если вы делаете это как единичный выстрел и не ожидаете, что формат сериализованных классов изменится (без добавления методов или полей, например) между выполнениями, вероятно, все будет в порядке.

Возможно, я неправильно понял ваш вопрос. «Что будет быстрее» также может означать, что вам интересно, какой из подходов будет быстрее для реализации . Вероятно, тот, с которым вы уже наиболее знакомы.

1 голос
/ 05 февраля 2009

В зависимости от конечного приложения, вы также можете рассмотреть возможность использования XStream (или подобной библиотеки) для экспорта / импорта XML.

0 голосов
/ 13 апреля 2010

Зачем ограничивать себя этим выбором? Очевидным кандидатом будет JSON, использующий простое связывание данных с Джексоном или Google-GSON . Довольно читаемый и быстрее, чем рукописный CSV; плюс обрабатывает случаи, которые CSV не может. Возможно, быстрее, чем сериализация JDK, и более гибкая (сериализация сложна, если / когда классы меняются даже наименьшим образом).

0 голосов
/ 06 февраля 2009

Я много сделал с сериализацией, которую мог бы сделать с файлами CSV.

Преимуществами сериализации являются скорость, безопасность типов и совместимость (RMI, EHcache и т. Д.). Недостатками являются необходимость создания версий объектов и записи средств просмотра (для включения проверки).

CSV медленнее и могут быть больше по размеру. Плюс в том, что вы можете просматривать их в текстовых редакторах, Excel и т. Д.

Я бы пошел на CSV, если скорость или размер не является проблемой.

Вы также можете использовать XStream и писать их как XML или JSON.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...