Для серіалізації об'єкта Java я хотів би перевірити різницю між використанням JSON і загальними інструментами серіалізації з точки зору часової та просторової продуктивності.
JSON обирає FastJSON.
Інструмент серіалізації використовує Protostuff і Kyro. Чому б не використати протобуф? Бо я вважаю, що для Java-класу з сотнями існуючих властивостей створення нового відповідного прототипного файлу — це трохи антилюдсько. Protostuff — це покращена версія Protobuf, яка дозволяє серіалізувати Java-об'єкт напряму, використовуючи його трохи на кшталт Kyro, без стільки проміжних процесів, як Protobuf. Інші, такі як Hession, Java з серіалізацією тощо, кажуть, мають значно гіршу продуктивність, ніж Kryo та Protobuf, тому я не знаю, чого очікувати.
Після простого тесту я виявив, що прогалина була досить очевидною, тож вирішив, що немає потреби проводити конкретну оцінку. Виріжте абзац із журналу і надішліть його, всі відчують це.
вартість часу — System.nanoTime(); Усі три є стандартними конфігураціями без жодної конфігурації. Космічний слід після серіалізації трохи менший, ніж у protostuff, і обидва значно вищі, ніж у JSON. Це легко зрозуміти, адже рядки json читабельні, не змушують їх надто сильно. Час, необхідний для серіалізації та десеріалізації, кращий, ніж у Kyro порівняно з FastJSON, і різниця досить очевидна.
Отже, підсумовуючи, якщо немає надто вимогливих вимог до простору, Protostuff може бути найкращим вибором. Protostuff має додаткову перевагу над Kyro, а саме: якщо клас java додає поля після серіалізації та до десеріалізації (чого неможливо уникнути в реальному бізнесі), Kyro стане марним. Однак прототип можна використовувати, якщо його додають наприкінці класу і він використовує сонячну серію JDK. Тому, якщо серіалізація використовується у сценаріях, таких як кеш, і серіалізований об'єкт потрібно зберігати довго, можна обрати лише protostuff.
Звісно, якщо потрібна читабельність чи щось подібне, можна використовувати лише json.
|