Я лично старался бы избегать "встроенной" сериализации Java:
для деталей того, что означают фактические байты, посмотрите Спецификация .
Сериализации объекта Java, Там различные альтернативы, такие как:
(Правовая оговорка: Я работаю на Google, и я делаю порт Буферов Протокола к C# как мой 20%-й проект, так ясно я думаю, что это - хороший бит технологии:)
Кросс-платформенные форматы почти всегда более строги, чем определенные для платформы форматы по очевидным причинам - Буферы Протокола имеют довольно ограниченный набор собственных типов, например - но совместимость может быть невероятно полезной. Также необходимо рассмотреть влияние управления версиями, с обратной и прямой совместимостью, и т.д. Текстовые форматы являются вообще ручными доступными для редактирования, но имеют тенденцию быть менее эффективными в обоих пространстве и времени.
В основном, необходимо посмотреть требования тщательно.
Основное преимущество сериализации состоит в том, что это чрезвычайно просто в использовании, относительно быстро, и сохраняет фактические сетки объекта Java.
, Но необходимо понять, что это действительно не предназначено, чтобы использоваться для того, чтобы хранить данные, но главным образом как путь к различным экземплярам JVM для передачи по сети с помощью протокола RMI.
посмотрите Объект Java Потоковый Протокол Сериализации для описания формата файла грамматика, используемая для сериализованных объектов.
Лично я думаю, что встроенная сериализация приемлема для сохранения недолгих данных (например, сохранить состояние объекта сессии между к запросам HTTP), который не релевантен вне приложения.
Для данных, которые имеют более длинное живо-разовое или должны использоваться вне Вашего приложения, я сохранил бы или в базу данных или по крайней мере использовал бы более наиболее часто используемый формат...
Я врезался в эту дилемму приблизительно месяц назад (см. вопрос, который я задал ).
основной урок я извлек уроки из него, сериализация Java использования только когда необходимый и если нет никакой другой опции. Как сказанный Jon, это имеет, это - крушения, в то время как другие методы сериализации являются намного легче, быстрее и более портативными.
Сериализация означает помещение структурированных данных в классы в плоский порядок байт-кода сохранить ее.
необходимо обычно использовать другие методы, чем метод Java здания, это просто сделано работать из поля, но если у Вас есть некоторое изменяющееся содержание или изменяющиеся заказы в будущем в Ваших сериализированных классах, Вы попадаете в беду, потому что Вы будете, не может загрузить их правильно.
Преимущество Сериализации объекта Java (JOS) состоит в том, что она просто работает. Существуют также инструменты там, которые делают то же как JOS, но используют формат XML вместо двоичного формата.
О длине: JOS пишет некоторую информацию о классе в запуске, вместо как часть каждого экземпляра - например, полные имена полей зарегистрированы однажды, и индекс в тот список имен используется для экземпляров класса. Это делает вывод дольше, если Вы только для записи один экземпляр класса, но более эффективно, если Вы пишете несколько (различных) экземпляров его. Мне не ясно, если Ваш пример на самом деле использует класс, но это - общая причина, почему JOS более длинен, чем можно было бы ожидать.
BTW: это - случайный факт, но я не думаю, что JSON записывает имена классов (как Вы имеете в своем примере), и таким образом, это не могло бы сделать то, в чем Вы нуждаетесь.
Причина, почему хранение крошечного объема информации является последовательной формой, является относительно большой, то, что это хранит информацию о классах объектов, которые это сериализирует. Если Вы сохраните дубликат своего списка, то Вы будете видеть, что файл не вырос очень. Храните тот же объект дважды, и различие является крошечным.
важные профессионалы: относительно простой в использовании, довольно быстро и может развиться (точно так же, как XML). Однако данные довольно непрозрачны, это только для Java, сильно связывает данные к классам, и недоверяемые данные могут легко вызвать DoS. Необходимо думать о сериализированной форме, вместо того, чтобы просто хлопнуть implements Serializable
везде.
Если у вас не слишком много данных, вы можете сохранить объекты в объект java.util.Properties. Пример пары ключ / значение: user_1234_firstname = Peter. Использование отражения для сохранения и загрузки объектов может упростить задачу.