К счастью, на самом деле я пишу это прямо сейчас .... К тому же преимущества, упомянутым (и я много о неразделенном не знаю), писать свой собственный формат, кажется, имеют следующие преимущества:
- Позволяет получать условный вывод (различные виды использования для сериализации, такие как сохранение и копирование, могут сериализовать различные части объекта).
- Должно быть быстрее, используйте меньше памяти, а в некоторых случаях используйте меньше диска, чем механизм по умолчанию (это от от Блоха Эффективная Java 2).
- Позволяет переименовывать переменные в сериализованном классе, сохраняя обратную совместимость.
- Позволяет получать доступ к данным из удаленных полей в новой версии (другими словами, изменять внутреннее представление ваших данных при сохранении обратной совместимости).
Я видел документацию вы цитируете, и упоминая только те 2 варианта немного вводит в заблуждение и оставляет совсем немного из: вы можете настроить формат сериализации в 2 способами, с помощью ObjectOutput/InputStream интерфейс для записи и чтения полей в определенном порядке (описан в Блохе) и использование классов PutField и GetField для записи и чтения полей по имени. Вы можете использовать serialPersistentFields в качестве цитаты, чтобы продлить этот второй метод, но это не требуется, если вам не нужно читать или писать данные с именем, которое не является именем переменной-члена.
Существует 3-й способ управления форматом, используя интерфейс Externizable, хотя я так и не исследовал его. И некоторые из преимуществ можно также получить через прокси-серверы Serialization (см. Bloch).
Любой человек может поправить меня по деталям, если я пропустил что-либо.
А я не видел, что ответ был уже принят. Этот ответ правильный, но я не думаю, что он отвечает на ваш вопрос «почему». – orbfish